Wie kann ich ein CSV mit PowerShell problemlos in zwei Excel-Arbeitsblätter aufteilen?

1349
Iszi

Ich habe kürzlich herausgefunden, dass PowerShell zum Schreiben von Excel-Dokumenten verwendet werden kann. Der erste Einsatz, an den ich dachte, war, das Analysieren einiger CSV-Berichte (zumindest teilweise) zu automatisieren, mit denen ich regelmäßig arbeiten muss.

Die grundlegende Arbeit, die ich machen muss, geht in etwa so:

  1. Erstellen Sie eine Excel-Arbeitsmappe mit zwei Arbeitsblättern.
  2. Kopieren Sie die Spaltenüberschriften aus der CSV-Datei in Zeile 1 auf beiden Seiten.
  3. Fügen Sie für jede Zeile in der CSV, die eine bestimmte Bedingung erfüllt (z. B.: Wert in Spalte R entspricht "Nicht in Blatt 1 einfügen"), die Zeile an Excel-Arbeitsblatt 2 an.
  4. Jede Zeile in der CSV, die nicht für Excel-Arbeitsblatt 2 bestimmt ist, sollte an Excel-Arbeitsblatt 1 angehängt werden.

Schritt 1 ist einfach genug - ich habe mehrere Online-Anleitungen gefunden, um mir den Einstieg zu erleichtern. Ich bin außerdem zuversichtlich, dass ich die bedingte Logik, die für die Schritte 3 und 4 erforderlich ist, selbst handhaben kann, basierend auf den Erfahrungen der PowerShell. Das Problem, für das ich Schwierigkeiten habe, eine Lösung zu finden, besteht darin, alle Daten in die Blätter zu schreiben.

Ich habe noch keine Excel-generierenden PowerShell-Skripts geschrieben, aber in jedem Handbuch, das ich gesehen habe, sind nur Anweisungen für das Schreiben einzelner Zellen enthalten - nicht ganze Zeilen auf einmal. Gibt es einen einfacheren Weg, dies zu tun?

Einige Dinge, die mich interessieren würden, wenn sie existieren:

  • Einige Methoden zum Kopieren einer gesamten Zeile aus einer CSV-Datei in ein Excel-Arbeitsblatt, ohne einzelne Zellen in der Zeile durchlaufen zu müssen.
  • Eine Möglichkeit, eine ganze Zeile von einer CSV-Datei in eine andere zu kopieren, ohne einzelne Zellen durchlaufen zu müssen, plus einen Befehl (oder ein relativ kurzes Skript), um eine gesamte CSV-Datei in ein Excel-Arbeitsblatt zu importieren.
  • Letzter Ausweg: Eine for-Schleife (oder einen ähnlich kurzen Skriptblock), die anstelle einer Methode zum Schreiben der gesamten Zeile verwendet wird. Dies sollte in der Lage sein zu bestimmen, wo das Kopieren von Zellen in einer Zeile gestoppt werden muss, ohne bis zur letzten Spalte gehen zu müssen (ich denke, es ist heutzutage XFD), während leere Zellen in der Mitte einer Zeile elegant behandelt werden.

Abgesehen davon, dass ich das oben herausgefunden habe, wird der wirklich schwierige Teil meines Skripts sicherstellen, dass es effizient mit Quell-CSV-Dateien arbeiten kann, die Tausende (möglicherweise Zehntausende) Zeilen lang sein können.

Das endgültige Skript muss mit Windows 7, PowerShell 2.0 und Excel 2010 kompatibel sein.

4

0 Antworten auf die Frage