Excel-Makro liest CSV-Dateien in Vorlagen ein
Problembeschreibung
Sie bekommen Daten in CSV-Dateien geliefert und müssen diese in ein vorhandenes Excel-Datei eintragen und ggf. auch Grafik neuerzeugen. Ab und zu hat eine dieser Dateien auch mehr als 255 Spalten oder 65536 Zeilen.
Lösung
Das Excel-AddIn csvimport.xla hilft in diesen Fällen, bei dem die Excel- Möglichkeiten csv-Dateien zu importieren mehrere Arbeitsschritte benötigen oder gar gänzlich scheitern.
-
Vertauschen von Importspalten
Berechnung von zusätzlichen Spalten und Erstellung von Grafiken
bis zu 1.200 Spalten breite csv-Dateien
mehr als 65.535 Zeilen lange csv_datei vollständig laden (auch ohne die neuste Excel-Version)
Die Position eines Eintrages anhand eines Schlüsselwortes in derDatendatei bestimmen zu können.
Import in Vorlage
In einer Vorlage können die Zeilen einer CSV-Datei als Werte in Spalten eines Blattes oder als feste Position in einem oder mehrere Blätter einer Mappe eingetragen werden.
Nach dem Kopieren der Vorlage wird die Vorlage darauf untersucht, ob sie in der letzten beschriebenen Zeile eines beliebigen Blattes Einträge in der Form "$COLUMN <Zahl>" besitzt. In der Zelle wird die entsprechende Spalte der Daten-Datei eingetragen. Alle anderen Zellen der letzten Zeile werden 1:1 kopiert, sodaß auch Excel-Funktionen herunterkopiert werden (siehe Spalte B).
Wenn keine Zellen mit "$COLUMN ..." gefunden werden, wird auf allen Blättern nach Zellen mit Einträgen der Form "$MATRIX <Wert>" gesucht.
Die gleiche Daten-Datei wie beim Beispiel von vorhin ergibt dann ein anderes Bild.
1;234 |
1;234 |
würde diese in der ersten Vorlage in Zeile 4 eingetragen, in der zweiten Vorlage würde ein Fehlen des Elementes "$MATRIX 5" bemerkt. Die Werte hinter dem Keywort $MATRIX müssen übrigens nicht nummerisch sein, es können auch andere Texte sein.
Eine Mischung der beiden Keywörter $COLUMN und $MATRIX ist nicht möglich.
Das gewünschte Trennzeichen zwischen den einzelnen Spalten kann über den Menüeintrag "Einstellung" "Trennzeichen CSV" eingestellt werden. (Hinweis: das Bild ist etwas veraltert, es fehlen die Trennzeichen $ und ~).
Hier kann man [unten links] auch einstellen, dass die Datenzeilen mit einem "D" in der ersten Spalte gekennzeichnet sein müssen. Die letzte Zeile, die mit einem "X" in der ersten Spalte gekennzeichnet ist, wird dann überprüft. Wenn Sie nicht vorhanden ist, ist bei der Erzeugung oder beim Transport der Datei ein Fehler (wie fehlender Plattenplatz) wahrscheinlich.
Auch kann man einstellen, ob die markierten Positionen, zu den keine Werte in der CSV-Datei gefunden wurden, gelöscht werden sollen. Diese Markierungen kann mit dem dritten Menüeintrag "Löschen der Positionsmerker" auch nachträglich in einer Kopie der Datei gelöscht werden. Dies kann dazu genutzt werden sukzessive in eine Jahresvorlage die Monatswerte einzulesen, ohne dass immer der gesamte Zeitraum berichtet werden muß. Wenn die Daten eines Monats eingelesen werden, löscht man die Positionsmerker nicht und speichert das Ergebnis als Vorlage für den nächsten Monat ab. Zur zwischenzeitlichen Präsentation der Ergebnisse (, bei der die "$MATRIX ..."-Einträge nur stören würden, ) löscht man alle noch existierenden Positionsmerker durch den entsprechenden Menüeintrag.
Die Einstellungen, die Sie über das Trennzeichen treffen, werden auch nach Beendigung gespeichert, sodaß Sie diese nicht jedes Mal erneut einstellen müssen.
> 255 Spalten
Bei diesem Unterpunkt wird nur nach der Datendatei gefragt. Danach wird die Datei komplett eingelesen. Die 256. Spalte wird auf dem 2. Blatt in Spalte 1 geschrieben. Es können dabei bis zu 1200 Spalten eingelesen werden, die maximale Anzahl der Spalten wird gemeldet.
> 65.536 Zeilen
Das Makro liest bei einer Vorlage mit $COLUMN auch mehr als 65.536 Zeilen ein. Es legt automatisch ein weiteres Blatt an und fängt in der ersten Zeile mit den Daten an, die nicht auf das letzte Blatt passten.
Wenn Sie keine Spalten weglassen oder in ihre Reihenfolge drehen wollen, können Sie auch einfach eine leere Excel-Mappe als Vorlage nehmen. Am besten speichern Sie hierfür eine Mappe mit nur einem Blatt ab, da nur das erste Blatt verwendet und schon beim nächsten benötigten auf jeden Fall ein neues angehängt wird.
Dateien
Die Datei csvimport.zip enthält das Excel-AddIn in der Version 0.26 zum Einlesen von CSV-Dateien.
Hinweis
Die Daten können auch direkt aus einem Archiv gelesen werden (siehe entsprechender Excel-Tipp).
Es wird ein Fehler gemeldet, wenn Sie für den Namen der abzuspeichernden Datei einen Namen ohne die Extension ".xls" verwenden. Dieser Fehler wird demnächst korrigiert.
Tests mit Dateien über eine Millionen Zeilen ergaben eine Einschränkung des Makros dessen Ursache noch nicht vollständig geklärt wurde. Nach etwas mehr als 1.047.000 Zeilen bricht das Makro mit einem Laufzeitfehler 1004 (bekannt auch als Notbremsen Fehler bei Excel) ab. Diese Anzahl ist unabhängig von der Breite der eingelesenen Zeilen, der Hauptspeicher des Rechners ist in der Regel noch nicht ausgelastet. Das Problem wird noch weiter untersucht.
Änderung von Version 0.26 zu 0.27:
-
Als zusätzliches Trennzeichen wurde die Tilde ~ eingebaut.
Die Performance wurde gesteigert, in dem überflüssige Debug-Ausgaben
auskommentiert wurden.
Änderung von Version 0.25 zu 0.26:
-
Bei der Matrixschreibweise können jetzt auch Texte oder Uhrzeiten für die
einzufügenden Werte verwendet werden. Dadurch geht die Möglichkeit verloren,
mehrfach vorkommende Werte in der Datendatei aufzusummieren.
Werden mehrere Zellen mit den gleichen Bezeichnung (z.B. "$MATRIX Datum")
gekennzeichnet,wird immer nur die erste gefundene Zelle ersetzt. Soll ein
eingelesener Wert mehrmals in der Exceldatei verwendet werden, wird die Verwendung
von Excelverweisen empfohlen.
Änderung von Version 0.24 zu 0.25:
-
Als zusätzliches Trennzeichen wird der Dollar zugelassen.
Änderung von Version 0.22 zu 0.24:
-
Unix-Dateien werden automatisch erkannt und korrekt eingelesen (noch nicht
bei > 255 Zeilen).
Änderung von Version 0.21 zu 0.22: Einige Kleinigkeiten wurden geändert
-
die Fileextension *.dat wurde ergänzt,
eine kleinere Anzahl Trennzeichen als Felder wird jetzt aktzeptiert
Vorlagen ohne Markierungen werden auf dem ersten Arbeitsblatt befüllt.
Geplant sind weitere Kontrollen und Informationserweiterungen bei der Kennzeichnung der Datenzeilen.
Kommentare dazu sind -wie immer- erwünscht.