Posts Tagged ‘How-To’

Donnerstag, 26. Juli 2012

Access stellt importierte Excel-Zeilenschaltungen als Sonderzeichen dar

Microsoft-Produkte weisen seit Jahrzehnten kompromisslose Interoperabilität auf:

As you have found, Excel uses only the line feed character (ASCII 10) to indicate a line break, while Access uses carriage return + line feed (ASCII 13 and ASCII 10).

Damit die Zeilenschaltungen auch in Access als Zeilenschaltungen angezeigt werden, führt man nach dem Import einer Excel-Datei in eine Access-Tabelle folgendes Query aus:

UPDATE Feststellungen SET Feststellung = Replace(Feststellung,Chr(10),Chr(13) & Chr(10));

Via: Import Text from Excel with line breaks (2003)

Tags: , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 18. Juli 2012

Microsoft Excel beschwert sich über „Too many different cell formats“

Es vergeht keinen Tag am Bürorechner, an welchem man nicht eine neue Fehlermeldung in Microsoft-Produkten präsentiert kriegt – und sich beim der Recherche zum Fehler wieder einmal wünschen würde, jeden einzelnen Entwickler in Redmond einen unendlich langsamen Tod sterben zu lassen.

Microsoft gibt seinen Endanwendern die grandiose Möglichkeit, jede einzelne Tabellenzeile mit einem individuellen Format zu versehen. Rahmendicke, Hintergrundfarben, Schriftschnitte können individuell definiert werden. Und jede so formatierte Zelle ergibt ein neues Zellformat, welches in der Excel-Datei zentral gesichert wird.

Das Schöne daran ist, dass es offenbar Endanwender in Schwellenländern gibt, welche es bei der Erledigung von ausgelagerten Arbeiten fertigbringen, annähernd 65’000 Formate in einer einzigen Excel-Datei mit ca. 20 Sheets unterzubringen. Heilige Shiva! Das Problem: Excel kriegt massiven Schluckauf, sobald diese Limite (wahrscheinlich mit der Grenze für unsigned integers) erreicht ist – nichts geht mehr, keine Zellformatierung, kein Zusammenführen von Zellen, ja nicht einmal kopieren geht mehr. Und dazu die lapidare Fehlermeldung:

Too many different cell formats.

Die Lösung ist im Grunde simpel: Das Dokument muss analysiert und nicht verwendete Styles gelöscht werden. Dafür gibt es mittlerweile unzählige Varianten, davon hier nur drei:

  • Kommerziell. 39 Dollar will der Entwickler des Style Reduction Tools haben, damit die Excel-Endanwender wieder arbeiten und nicht Excel-Fehlermeldungen wegglicken und Abstürze überwinden müssen.
  • Handgestrickt. Auf Stackoverflow findet sich VBA-Code, welchen man mit entsprechenden Kenntnissen über eine Excel-Datei laufen lassen kann. Fallstricke:
    • .xlsx-Dateien müssen zuerst in .xlsm-Dateien umkonvertiert werden
    • Danach muss man das Developer-Ribbon aktivieren
    • Anschliessend fügt man ein Modul in die Excel-Datei ein
    • Nun kopiert man den Source-Code in das Modul hinein
    • Schlussendlich muss unter Tools > References noch „Microsoft Scripting Runtime“ aktiviert werden
    • Jetzt kann man die Funktion starten, fliegt aber rasch auf die Schnauze, weil Dim iStyleCount As Integer als Integer definiert ist und deshalb überläuft
    • Nachdem der Laptop für ca. 20-30 Minuten wie totgefroren ist, erscheint dann die erlösende Meldung: Statt der ursprünglich 64999 gefundenen Styles sind nach der Bereinigung nur noch effektiv 10 verwendete Stück im Dokument
  • Beschleunigt. Da sich Microsoft des Problems bewusst ist, verlinken sie in ihrem KB-Artikel zur Fehlermeldung auf ein kostenfreies Tool eines unabhängigen Entwicklers (.NET4.0 version of the XLStylesTool is now available), welcher die Styles auf OOXML-Ebene säubert, was einen massiven Geschwindigkeitsgewinn gegenüber der VBA-Version ermöglicht. WICHTIG: Nachdem die Applikation gestartet und die Datei ausgewählt wurde, muss zwingend [x] „Commit changes …“ ausgewählt werden, damit die Anpassungen gespeichert werden können.

VBA-Code

Via: Too Many Different Cell Formats, ergänzt/überarbeitet von eMeidi.com

' Description:
'    Borrowed largely from http://www.jkp-ads.com/Articles/styles06.asp
' Additional debug message piping to .txt file in C:\ by eMeidi.com
' Bugfixing iStyleCount from Integer to Long by eMeidi.com

Option Explicit

' Description:
'    This is the "driver" for the entire module.
Public Sub DropUnusedStyles()

    Dim styleObj As Style
    Dim rngCell As Range
    Dim wb As Workbook
    Dim wsh As Worksheet
    Dim str As String
    Dim iStyleCount As Long
    Dim dict As New Scripting.Dictionary    ' <- from Tools / References... / "Microsoft Scripting Runtime"

    ' wb := workbook of interest.  Choose one of the following
    ' Set wb = ThisWorkbook ' choose this module's workbook
    Set wb = ActiveWorkbook ' the active workbook in excel
    
    Dim strPath As String
    strPath = "C:\excelFormatCleanerDebug.txt"
    Dim f
    f = FreeFile()
    Open strPath For Output As f
    'Print #f, Text

    Debug.Print "BEGINNING # of styles in workbook: " & wb.Styles.Count
    'GoTo Bla
    
    ' dict := list of styles
    For Each styleObj In wb.Styles
        str = styleObj.NameLocal
        iStyleCount = iStyleCount + 1
        Call dict.Add(str, 0)    ' First time:  adds keys
        'Debug.Print str & ", ";
        Print #f, str & ", "
    Next styleObj
    Debug.Print "  dictionary now has " & dict.Count & " entries."
    ' Status, dictionary has styles (key) which are known to workbook
    'GoTo Bla
    
    ' Traverse each visible worksheet and increment count each style occurrence
    For Each wsh In wb.Worksheets
        If wsh.Visible Then
            For Each rngCell In wsh.UsedRange.Cells
                str = rngCell.Style
                dict.Item(str) = dict.Item(str) + 1     ' This time:  counts occurrences
                Print #f, str & "+1"
            Next rngCell
        End If
    Next wsh
    ' Status, dictionary styles (key) has cell occurrence count (item)


    ' Try to delete unused styles
    Dim aKey As Variant
    On Error Resume Next    ' wb.Styles(aKey).Delete may throw error

    For Each aKey In dict.Keys

        ' display count & stylename
        '    e.g. "24   Normal"
        Debug.Print dict.Item(aKey) & vbTab & aKey
        Print #f, dict.Item(aKey) & vbTab & aKey

        If dict.Item(aKey) = 0 Then
            ' Occurrence count (Item) indicates this style is not used
            Call wb.Styles(aKey).Delete
            If Err.Number <> 0 Then
                Debug.Print vbTab & "^-- failed to delete"
                Err.Clear
            End If
            Call dict.Remove(aKey)
        End If

    Next aKey

    Debug.Print "ENDING # of style in workbook: " & wb.Styles.Count
Bla:
End Sub

Tags: , , , , , , ,
Labels: IT, Programmierung

Keine Kommentare | neuen Kommentar verfassen

Montag, 9. Juli 2012

Wenn Word 2007 bei jedem Speichern wegen Kommentaren und Änderungen nervt

The document being saved contains comments. Continue with save?

Wer sich – wie ich – über diese typische Nervensäge aus dem Hause Microsoft aufregt, dem sei hier Abhilfe empfohlen:

  1. Office-Knopf
  2. Word options
  3. Trust Center
  4. Trust Center Settings…
  5. [] Warn before printing, saving or sending a file that contains tracked changes or comments

Via: Prompts to save comments

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Montag, 2. April 2012

Einen Amazon S3-Bucket leeren und dann löschen

Vor einiger Zeit bin ich von JungleDisk auf tarsnap migriert. Als sozusagen „letzte“ Amtshandlung gehört nun dazu, dass ich den Amazon S3-Bucket lösche. Dies ist gar nicht so einfach, weil nur leere Buckets gelöscht werden können — das heisst, alle darin gespeicherten Objekte müssen zuerst entfernt werden.

Da mir die Sache mit Cyberduck zu langwierig erschien (und gelegentlich zu komischen Fehlermeldungen führte), habe ich mich nach einem Kommandozeilen-Tool umgesehen.

s3sync

Fündig wurde ich mit s3sync. Diese Sammlung von Ruby-Scripts erlaubt es, mit Amazon S3 zu kommunizieren.

Nachdem ich die Script-Sammlung heruntergeladen und entpackt hatte, musste ich zuerst die zwingend benötigte Konfigurationsdatei unter $HOME/.s3conf/s3config.yml ablegen. Deren Inhalt:

AWS_ACCESS_KEY_ID: ...
AWS_SECRET_ACCESS_KEY: ...

AWS_CALLING_FORMAT: SUBDOMAIN

Der Kommandozeilenbefehl zum Löschen der Dateien im Bucket lautete folgendermassen:

./s3cmd.rb -v deleteall jd2-5d95f837098760279d8c32d215671111-eu

Quelle: How to delete an Amazon S3 bucket with lots of files in it

Zeichensatz-Problem

Leider gab es — wohl auf Grund der Herkunft meiner Dateien von einem Mac OS X-Dateisystem — immer wieder folgende Fehlermeldung:

./s3cmd.rb:119:in `iconv': "\314\210s Text innen2 "... (Iconv::IllegalSequence)
        from ./s3cmd.rb:119:in `s3cmdMain'
        from ./s3cmd.rb:245

Deshalb empfiehlt es sich, den Programmcode an zwei Stellen anzupassen, in welchen auf iconv zurückgegriffen wird:

... Iconv.iconv($S3SYNC_NATIVE_CHARSET, ...

wird zu

... Iconv.iconv($S3SYNC_NATIVE_CHARSET + "//IGNORE", ...

Quelle: Ignore Iconv::IllegalSequence while using Ruby WWW::Mechanize

Tags: , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Montag, 2. April 2012

vim unter Mac OS X Farbe verleihen

Hierzu erstellt man einfach ~/.vimrc und fügt gleich zuoberst ein:

syntax on

Nebenbei: Eine Zeile kommentiert man mit dem Anführungszeichen („) aus.

Weitere viele nützliche Einstellungen finden sich unter Example .vimrc

Tags: , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 29. März 2012

Windows Netzwerkverbindungen als Administrator öffnen

Wenn man als Standardbenutzer die Windows Netzwerkverbindungen in den Systemsteuerungen mit Administratorrechten öffnen will, verwendet man folgenden Befehl:

runas /user:<Administratorbenutzer> "explorer.exe /n,::{7007ACC7-3202-11D1-AAD2-00805FC1270E}"

Tags: , , ,
Labels: IT

1 Kommentar | neuen Kommentar verfassen

Donnerstag, 29. März 2012

Mit Access eine Textdatei mit Pipe-Trennzeichen einlesen

Will man unter Access 2007 eine Textdatei einlesen, welche Datensätze enthält, dessen Felder mit einem Strich (engl. „Pipe“) getrennt sind, muss man folgenden Trick beachten:

Damit das Pipe-Symbol in das Trennzeichenfeld eingeben kann, muss der Inhalt des leeren Feldes zuerst mit der Maus ausgewählt werden (Ctrl-A). Erst dann kann das Symbol eingegeben werden:

Quelle: Import Text file with Pipe Delimited – 2007

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 27. März 2012

E-Mail-Adressenformat von Firmen herausfinden

Gelegentlich stehe ich vor der Aufgabe, ein Mitarbeiter unter seiner E-Mail-Adresse auf der Arbeit zu kontaktieren, dessen E-Mail-Adresse ich nicht kenne.

Damit ich das Format der E-Mail-Adressen der jeweiligen Firma herausfinden kann, besuche ich dann jeweils die Web-Site. Manchmal werden die E-Mail-Adressen von leitenden Personen auf der Web-Site angegeben, anhand derer man anschliessend die Adresse der gesuchten Person herleiten kann. Ist dies nicht der Fall, gibt es aus Erfahrung noch ein anderer Ort auf der Web-Site, wo man heute garantiert eine E-Mail-Adresse findet: Bei den Stellenangeboten. Normalerweise ist bei einem Stelleninserat die E-Mail-Adresse der verantwortlichen HR-Mitarbeiterin angegeben.

PS: Leider verhindert Google meines Wissens die Suche nach E-Mail-Adressen auf einer bestimmten Web-Site, um es Spammern nicht zu einfach zu machen, an neues Adress-Material zu gelangen.

Tags: ,
Labels: Web

1 Kommentar | neuen Kommentar verfassen

Montag, 19. März 2012

Eine laufende screen-Session übernehmen

Da bin ich heute wohl zu überstürzt aus dem Haus gegangen und habe vergessen, eine laufende screen-Session mittels Ctrl-A-D in den Detached-Modus zu verfrachten.

Als ich nun per SSH über 3G auf meinen Mac mini zugreifen wollte, kriegte ich eine Fehlermeldung zu Gesicht, dass der Screen „attached“ sei.

Die Lösung? Ganz einfach:

screen -r -D 5004

Mit der Option -D wird der derzeit aktiv in die screen-Session eingeloggte Benutzer „rausgekickt“ und ich übernehme den Screen. Nett!

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 14. März 2012

Titelzeile eines Windows-Fensters ausserhalb der Bildschirmansicht

Wer wie ich gezwungen ist, auf der Arbeit mit Microsoft Windows zu arbeiten, hat im wechselnden Zweimonitorbetrieb vielleicht auch schon einmal das Problem gehabt, dass die Titelzeile eines Fensters ausserhalb der Bildschirmansicht zu liegen kam, wenn man ein maximiertes Fenster verkleinerte.

Es gibt aber tatsächlich eine Möglichkeit, um die Titelzeile wieder innerhalb den angezeigten Bildschirmbereich zu bringen:

  1. Alt + Space (Leertaste)
  2. M
  3. Das Fenster mit den Cursor-Taste verschieben
  4. Enter

Quelle: Move a window when its title bar is off the screen

Tags: , ,
Labels: IT

2 Kommentare | neuen Kommentar verfassen