Niedawno dowiedziałem się, że do pisania dokumentów Excel można używać programu PowerShell. Pierwszym zastosowaniem, o którym pomyślałem, było (przynajmniej częściowo) zautomatyzowanie parsowania niektórych raportów CSV, z którymi regularnie muszę pracować.

Podstawowa praca, którą muszę wykonać, wygląda mniej więcej tak:

  1. Utwórz skoroszyt programu Excel z dwoma arkuszami.
  2. Skopiuj nagłówki kolumn z pliku CSV do wiersza 1 na obu arkuszach.
  3. Dla każdego wiersza w pliku CSV, który spełnia określony warunek (np. Wartość w kolumnie R jest równa „Nie umieszczaj w arkuszu 1”), dołącz wiersz do arkusza programu Excel 2.
  4. Każdy wiersz w pliku CSV, który nie jest przeznaczony dla arkusza programu Excel 2, powinien zostać dołączony do arkusza programu Excel 1.

Krok 1 jest dość prosty - znalazłem w Internecie kilka przewodników, które pomogą mi zacząć. Jestem również pewien, że potrafię samodzielnie poradzić sobie z logiką warunkową wymaganą dla kroków 3 i 4, w oparciu o wcześniejsze doświadczenia z programem PowerShell. Problemem, dla którego trudno mi znaleźć rozwiązanie, jest zapisanie wszystkich danych w arkuszach.

W rzeczywistości nie napisałem jeszcze żadnych skryptów PowerShell generujących program Excel, ale każdy przewodnik, który widziałem, wydaje się zawierać tylko instrukcje pisania poszczególnych komórek - nie całych wierszy naraz. Czy jest na to łatwiejszy sposób?

Chciałbym się zainteresować niektórymi rzeczami, jeśli istnieją:

  • Niektóre sposoby kopiowania całego wiersza z pliku CSV do arkusza programu Excel bez konieczności przechodzenia przez poszczególne komórki w rzędzie.
  • Jakiś sposób kopiowania całego wiersza z jednego pliku CSV do drugiego bez konieczności przechodzenia przez poszczególne komórki, a także polecenie (lub rozsądnie krótki skrypt), aby zaimportować cały plik CSV do arkusza programu Excel.
  • Ostateczna metoda: pętla for (lub podobnie krótki blok skryptu) do użycia zamiast metody zapisu całego wiersza. Powinno to umożliwić określenie, gdzie zatrzymać kopiowanie komórek w rzędzie, bez konieczności przechodzenia do ostatniej kolumny (myślę, że w dzisiejszych czasach jest to XFD), z wdziękiem obsługując puste komórki w środku rzędu.

Poza rozpracowaniem powyższego, prawdziwą trudnością mojego skryptu będzie upewnienie się, że może on wydajnie działać na źródłowych plikach CSV, które mogą mieć tysiące (prawdopodobnie dziesiątki tysięcy) wierszy.

Ostateczny skrypt będzie musiał być zgodny z Windows 7, PowerShell 2.0 i Excel 2010.

Iszi
źródło