Jak przekonwertować plik Excel z wieloma arkuszami na zestaw plików CSV?

23

Mam plik Excel z 20 arkuszami. Czy istnieje sposób na szybką konwersję pliku do 20 plików CSV - po jednym dla każdego arkusza?

Oczywiście mogę to zrobić ręcznie, ale będę musiał dużo przetwarzać te pliki, więc byłoby wspaniale mieć jakieś narzędzie wiersza polecenia (lub nawet przełączniki wiersza polecenia programu Excel).

AngryHacker
źródło

Odpowiedzi:

17

Metoda vembutech jest zdecydowanie bardziej dopracowanym rozwiązaniem. Oto lekkie makro VBA, które eksportuje wszystkie arkusze z jednego skoroszytu.

Przechodzi do aktywnego folderu skoroszytów, wszystkie nazwy są workbookname_sheetname.csv

Sub exportcsv()
Dim ws As Worksheet
Dim path As String

path = ActiveWorkbook.path & "\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1)
For Each ws In Worksheets
    ws.Activate
    ActiveWorkbook.SaveAs Filename:=path & "_" & ws.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False
Next
End Sub

EDYTOWAĆ:

Za komentarz. Oryginalne makro po prostu używa funkcji Zapisz jako (która jest trochę jak zamknięcie oryginału). Jeśli chcesz to zrobić, pozostawiając oryginalny otwarty, musisz skopiować do nowego skoroszytu, zapisać, zamknąć nowy skoroszyt.

Sub exportcsv()
Dim ws As Worksheet
Dim path As String

path = ActiveWorkbook.path & "\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1)
For Each ws In Worksheets
    ws.Copy
    ActiveWorkbook.SaveAs Filename:=path & "_" & ws.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False
    ActiveWorkbook.Close False
Next
End Sub
gtwebb
źródło
Właśnie dostaję Run-time error '1004': Application-defined or object-defined errorsię do mojego programu Excel dla komputerów Mac.
bryan
8

Zamiast skryptu wsadowego można użyć konwertera XLS na CSV, który dałby lepszy interfejs użytkownika

Bezpośredni link: http://cwestblog.com/wp-content/uploads/2013/04/XLS-to-CSV-Converter-1.1.0.zip

Rozpakuj plik .HTA.

Kliknij dwukrotnie plik .HTA

wprowadź opis zdjęcia tutaj

Znajdź folder, w którym znajduje się plik xls

wybierz schemat nazewnictwa csv i kliknij przycisk Rozpocznij konwersję, która spowoduje konwersję wszystkich plików xls w folderze do plików csv

Jeśli twój folder zawiera 3 pliki xls z 3 arkuszami, utworzyłby 9 plików csv dla każdego arkusza i możesz zidentyfikować plik csv za pomocą schematu nazewnictwa csv

Mam nadzieję że to pomoże!

vembutech
źródło
4

Oto skrypt python getsheets.py ( mirror ), powinieneś zainstalować pandasi xlrdprzed użyciem.

Uruchom to:

pip3 install pandas xlrd  # or `pip install pandas xlrd`

Jak to działa?

$ python3 getsheets.py -h
Usage: getsheets.py [OPTIONS] INPUTFILE

Convert a Excel file with multiple sheets to several file with one sheet.

Examples:

    getsheets filename

    getsheets filename -f csv

Options:
-f, --format [xlsx|csv]  Default xlsx.
-h, --help               Show this message and exit.

Konwertuj na kilka xlsx:

$ python3 getsheets.py goods_temp.xlsx
Sheet.xlsx Done!
Sheet1.xlsx Done!

All Done!

Konwertuj na kilka plików csv:

$ python3 getsheets.py goods_temp.xlsx -f csv
Sheet.csv Done!
Sheet1.csv Done!

All Done!
Scott Ming
źródło
Także: pip3 install openpyxl click ... a potem dostaję ImportError: cannot import name 'get_column_letter'do linii 513 pandy excel.py; Wydaje mi się, że moja instalacja pand jest w jakiś sposób zepsuta.
Jameson Quinn,
3

Makro z ExtendOffice do zapisywania kart w folderze Dokumenty:

Sub ExportSheetsToCSV()
    Dim xWs As Worksheet
    Dim xcsvFile As String
    For Each xWs In Application.ActiveWorkbook.Worksheets
        xWs.Copy
        xcsvFile = CurDir & "\" & xWs.Name & ".csv"
        Application.ActiveWorkbook.SaveAs Filename: = xcsvFile, _
        FileFormat: = xlCSV, CreateBackup: = False
        Application.ActiveWorkbook.Saved = True
        Application.ActiveWorkbook.Close
    Next
End Sub
Michel de Ruiter
źródło