Jak wsadowo przekonwertować .csv na .xls / xlsx


11

Szukam sposobu, aby szybko przekonwertować katalog plików .csv do formatu .xls lub .xlsx (byłoby miło, gdybym mógł zrobić / lub).

Czy istnieje prosty sposób, aby to zrobić, czy muszę zainstalować program innej firmy?


1
Nie jestem pewien, dlaczego miałbyś to zrobić. csv jest dobrze otwarty w programie Excel. każda osoba potrzebująca interakcji może po prostu otworzyć się bez problemu.
Jody

2
Masz rację Excel dobrze otwiera csv i xls / xlsx. Inne programy jednak tego nie robią. =)
mindless.panda

1
Więc w jakim programie chcesz tego użyć?
Kirk

Odpowiedzi:


21

Zakładając, że lubisz i masz Python (z jakiegoś powodu), możesz użyć tego skryptu:

import os
import glob
import csv
import xlwt # from http://www.python-excel.org/

for csvfile in glob.glob(os.path.join('.', '*.csv')):
    wb = xlwt.Workbook()
    ws = wb.add_sheet('data')
    with open(csvfile, 'rb') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, val in enumerate(row):
                ws.write(r, c, val)
    wb.save(csvfile + '.xls')

Uruchomiony w katalogu ze wszystkimi plikami CSV, przekonwertuje je wszystkie i uderzy „.xls” na koniec.

W przypadku programu Excel 2007+ (pliki xlsx) obsługującego do około 1 Mrows:

import os
import glob
import csv
import openpyxl # from https://pythonhosted.org/openpyxl/ or PyPI (e.g. via pip)

for csvfile in glob.glob(os.path.join('.', '*.csv')):
    wb = openpyxl.Workbook()
    ws = wb.active
    with open(csvfile, 'rb') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader, start=1):
            for c, val in enumerate(row, start=1):
                ws.cell(row=r, column=c).value = val
    wb.save(csvfile + '.xlsx')

2
Na komputerze Macintosh użyłem powyższej wersji xlsx. Musiałem zmienić „rb” na „rU”, aby obejść błąd „Universal-newline mode” w Pythonie. Użycie „start = 1” dla „wierszy w wyliczeniu” i „val w wyliczeniu” utworzyło pusty wiersz powyżej i pustą kolumnę po lewej stronie rzeczywistych danych. Zmieniłem oba na „start = 0”, co uruchomiło dane w komórce A1 (lewy górny róg) arkusza kalkulacyjnego (Excel 2011). Zmieniłem również ostatni wiersz na „wb.save (os.path.splitext (csvfile) [0] + '.xlsx') ', aby usunąć część pliku .csv (np. Nnnn.csv.xlsx na nnnn. xlsx).
Michael S Taylor

1

Oto skrypt perla, który podobno to robi, ale wydaje się, że dużo pracy wymaga zrobienia czegoś, co jest już wbudowane w Excel.


1

W twoim pytaniu pozostało wiele do powiedzenia.

Zakładając, że twoje pliki CVS mają strukturę katalogów podobną do

c:\randompath\CSV\
    a.csv
    b.csv
    c.csv
      :
      :
    z.csv

i chcesz skończyć z

c:\randompath\XLS\
    a.xls
    b.xls
    c.xls
      :
      :
    z.xls

Mogę wymyślić trzy drogi do przejścia w zależności od stosunku pracy z góry do prac porządkowych, które jesteś gotów wykonać.

  1. Bez wstępnego kodowania: Użyj Eksploratora Windows, aby przejść do plików CSV, użyj dowolnej metody, która najlepiej działa, aby wybrać pliki do konwersji (lasso, ctrl + a, ctrl + kliknięcie, shift + kliknięcie), a następnie kliknij prawym przyciskiem myszy jeden z wybranych plików i kliknij Otwarty. Spowoduje to otwarcie wszystkich plików w programie Excel. Następnie dla każdego pliku możesz wybrać „Plik” i „Zapisz jako”, a na końcu wybrać nowy format pliku, w którym chcesz go zapisać.
  2. Prosty plik wsadowy: ten plik wsadowy może używać symboli wieloznacznych i / lub a dla każdej struktury pętli, aby otworzyć dla Ciebie każdy z plików CSV, a następnie możesz ręcznie przetworzyć je jak poprzednio.
  3. Utwórz program VBA w arkuszu kalkulacyjnym Excel: VBA może automatycznie otworzyć każdy plik CSV, a następnie zapisać go w formacie Excel. Możesz nawet dodać proste okno komunikatu, które oferuje wybór xls lub xlsx podczas otwierania każdego pliku.

Zauważ, że nie napisałem jeszcze żadnego kodu, aby wykonać te czynności (jeszcze). Po prostu oferuję pomysły na punkt wyjścia. Być może, jeśli możesz podać więcej szczegółów na temat tego, czego chcesz, możesz uzyskać bardziej szczegółowe wyjaśnienia dotyczące sposobu podejścia ode mnie lub innego członka forum.


0

Dla Windowsa? Wersja wiersza polecenia CoolUtils „ Total CSV Converter ” obsługuje wiele formatów wyjściowych, w tym JSON, Access, DBF, XML i SQL i kosztuje tylko 40 USD. Może rekursować podkatalogi, usuwać oryginalne pliki CSV, łączyć wszystkie pliki w jeden dokument i nie tylko.

http://www.coolutils.com/TotalCSVConverter

CSVConverter.exe <source> <destination> <options>

Advanced CSV Converter ” (40-200 USD) to przenośny plik EXE, który może to zrobić szybko i bez konieczności instalowania programu Excel.

http://www.dbf2002.com/csv-converter/commandline.html

"c:\Program Files\CSV Converter\csvcnv.exe" c:\base\*.csv c:\exports\ /TOXLSX /SRCHDR

Konwertuj XLS ” SoftInterface może korzystać z Excela (ale nie jest to wymagane) i jest droższy (500 $ +), ale obsługuje więcej formatów i ma więcej opcji.

http://www.softinterface.com/Convert-XLS/Convert-XLS.htm

"c:\Program Files (x86)\Softinterface, Inc\Convert XLS\ConvertXLS.exe" /V /S"c:\base\*.csv" /T"c:\exports\*.xlsx" /F6 /C51 /M2

Gnumeric ” to program do obsługi arkuszy kalkulacyjnych typu open source, który może wykonywać bezpośrednią konwersję, ale został wycofany dla systemu Windows w sierpniu 2014 roku.

http://www.gnumeric.org/

ssconvert file.csv file.xlsx

Jeśli masz zainstalowany Python, „ csv2odf ” jest opcją typu open source i wykorzystuje szablonowe podejście do generowania plików ods, odt, html, xlsx lub docx.

http://sourceforge.net/projects/csv2odf/

csv2odf data.csv template.odt output.xlsx

0

Z Node 8+ i bash:

npm install -g pguardiario/csv2xlsx

for file in *.csv; do csv2xlsx "$file"; done

-1

Prosty sposób: otwórz plik csv z Microsoft Excel, przekonwertuj tekst na kolumny (wybierz komórki / tekst, kliknij Menu - Dane - Tekst na kolumny) ustaw opcję konwersji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.