Szukam sposobu na konwersję plików xlsx do plików csv w systemie Linux.
Nie chcę używać PHP / Perla ani niczego podobnego, ponieważ patrzę na przetwarzanie kilku milionów linii, więc potrzebuję czegoś szybkiego. Znalazłem program w repozytoriach Ubuntu o nazwie xls2csv, ale będzie on konwertować tylko pliki xls (Office 2003) (z których obecnie korzystam), ale potrzebuję wsparcia dla nowszych plików Excel.
Jakieś pomysły?
Odpowiedzi:
Aplikacja arkusza kalkulacyjnego Gnumeric jest dostarczana z narzędziem wiersza polecenia o nazwie ssconvert, które może konwertować różne formaty arkuszy kalkulacyjnych:
Aby zainstalować na Ubuntu:
Aby zainstalować na komputerze Mac:
źródło
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
Metoda LibreOffice prawdopodobnie mogłaby przetwarzać inne formaty, ale nie mogłem sprawić, by działała (po prostu otwierałby pusty plik za każdym razem, nawet z--headless
argumentem).apt-get install gnumeric --no-install-recommends
. Jedyną wadą jest to, że wywołuje wiele ostrzeżeń. GConf-WARNING **: Klient nie mógł połączyć się z demonem D-BUS podczas działania. Prostyssconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
załatwi sprawę.-S
flaga zapisała wiele arkuszy. Każdy idzie do własnego pliku.ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
.Możesz to zrobić za pomocą LibreOffice:
Z powodów, które nie są dla mnie jasne, być może będziesz musiał uruchomić to z sudo. Możesz ustawić LibreOffice na pracę z sudo bez konieczności podawania hasła, dodając ten wiersz do pliku sudoers:
źródło
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
pracował dla mnie na OS X.--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
. Aby uzyskać szczegółowe informacje, zobacz wiki open office .Jeśli masz już środowisko Desktop, to jestem pewien, że Gnumeric / LibreOffice działałoby dobrze, ale na bezgłowym serwerze (takim jak Amazon Web Services) wymagają one dziesiątek zależności, które również musisz zainstalować.
Znalazłem tę alternatywę dla Pythona:
https://github.com/dilshod/xlsx2csv
Instalacja zajęła 2 sekundy i działa jak urok.
Jeśli masz wiele arkuszy, możesz je eksportować jednocześnie lub pojedynczo:
Odsyła także do kilku alternatyw wbudowanych w Bash, Python, Ruby i Java.
źródło
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/prettytable-0.7.2-py2.7.egg/EGG-INFO/top_level.txt'
). Teraz, gdy o tym myślę, mam ten sam błądcsvkit
.xlsx2csv
pakiet, więc nie trzeba go ręcznie instalować,easy_install
ale można użyć menedżera pakietów.sudo easy_install xlsx2csv
W bash użyłem tej komendy libreoffice do konwersji wszystkich moich plików xlsx w bieżącym katalogu:
Dba o spacje w nazwie pliku.
Próbowałem jeszcze kilka lat później i to nie zadziałało. Ten wątek zawiera kilka wskazówek, ale najszybszym rozwiązaniem było uruchomienie jako root (lub uruchomienie a
sudo libreoffice
). Nie elegancki, ale szybki.Użyj polecenia scalc.exe w systemie Windows
źródło
scalc.exe
raczej niżlibreoffice
. Pracowałem dla mnie dzisiaj nad bieżącą stabilną wersją LO.Użyj csvkit
Aby uzyskać szczegółowe informacje, sprawdź ich doskonałe dokumenty
źródło
Inną opcją byłoby użycie R za pomocą małego opakowania bash dla wygody:
źródło
Jeśli
.xlsx
plik ma wiele arkuszy,-s
można użyć flagi, aby uzyskać żądany arkusz. Na przykład:second_sheet.csv
zawierałby dane z drugiego arkusza wmy_file.xlsx
.źródło
Korzystanie z aplikacji arkusza kalkulacyjnego Gnumeric , która pochodzi z narzędzia wiersza polecenia o nazwie ssconvert, jest naprawdę bardzo proste:
i jesteś skończony!
źródło
Jeśli możesz uruchomić wiersz poleceń Java, możesz to zrobić za pomocą programu Extractor Excel HSSF Apache POI . Ma to
main
metoda, która mówi za wyciąg z linii poleceń . Ten wydaje się po prostu zrzucić wszystko. Wskazują na ten przykład, który konwertuje na CSV . Będziesz musiał go skompilować, zanim będziesz mógł go uruchomić, ale ma teżmain
metodę, więc nie powinieneś robić dużo kodowania, aby działał.Inną opcją, która może latać, ale będzie wymagać trochę pracy z drugiej strony, jest sprawienie, aby twoje pliki Excela przychodziły do ciebie jako Excel XML Data lub XML Spreadsheet wszelkich wywołań MS, które formatują te dni. Otworzy przed Tobą zupełnie nowy świat możliwości krojenia i kostkowania w dowolny sposób.
źródło
Jak powiedzieli inni,
libreoffice
można konwertować pliki xls do csv. Problemem był dla mnie wybór arkusza.Ten skrypt Python libreoffice wykonuje dobrą robotę przy konwersji pojedynczego arkusza do CSV.
Zastosowanie to:
Jedynym minusem (z mojej strony) jest to, że
--headless
nie działa. Mam okno LO, które pojawia się na sekundę, a następnie wychodzi.Nie przeszkadza mi to, to jedyne narzędzie, które wykonuje tę pracę szybko.
źródło