it-swarm-eu.dev

Converti xlsx in csv in Linux con la riga di comando

Sto cercando un modo per convertire i file xlsx in file CSV su Linux.

Non voglio usare PHP/Perl o qualcosa di simile dal momento che sto cercando di elaborare diversi milioni di righe, quindi ho bisogno di qualcosa di veloce. Ho trovato un programma sui repository di Ubuntu chiamato xls2csv, ma convertirà solo i file xls (Office 2003) (che attualmente sto usando) ma ho bisogno del supporto per i nuovi file Excel.

Qualche idea?

205
user1390150

L'applicazione Gnumeric spreadsheet viene fornita con un'utilità della riga di comando chiamata ssconvert che può essere convertita in una varietà di formati di foglio di calcolo:

$ ssconvert Book1.xlsx newfile.csv
Using exporter Gnumeric_stf:stf_csv

$ cat newfile.csv 
Foo,Bar,Baz
1,2,3
123.6,7.89,
2012/05/14,,
The,last,Line

Per installare su Ubuntu:

apt-get install gnumeric

Per installare su Mac:

brew install gnumeric
186
jmcnamara

Puoi farlo con LibreOffice:

libreoffice --headless --convert-to csv $filename --outdir $outdir

Per ragioni che non mi sono chiare, potrebbe essere necessario eseguirlo con Sudo. Puoi fare in modo che LibreOffice funzioni con Sudo senza richiedere una password aggiungendo questa riga al file sudoers:

users ALL=(ALL) NOPASSWD: libreoffice
117
spiffytech

Se si dispone già di un ambiente desktop, sono sicuro che Gnumeric/LibreOffice funzionerebbe bene, ma su un server headless (come Amazon Web Services), richiedono decine di dipendenze che è necessario installare.

Ho trovato questa alternativa a Python:

https://github.com/dilshod/xlsx2csv

$ easy_install xlsx2csv
$ xlsx2csv file.xlsx > newfile.csv

Ci sono voluti 2 secondi per l'installazione e funziona come un fascino. 

Se hai più fogli puoi esportarli tutti in una volta o uno alla volta:

$ xlsx2csv file.xlsx --all > all.csv
$ xlsx2csv file.xlsx --all -p '' > all-no-delimiter.csv
$ xlsx2csv file.xlsx -s 1 > sheet1.csv

Si collega anche a diverse alternative costruite in Bash, Python, Ruby e Java.

99
andrewtweber

In bash, ho usato questo comando libreoffice per convertire tutti i miei file xlsx nella directory corrente:

for i   in *.xlsx; do  libreoffice --headless --convert-to csv "$i" ; done

Si prende cura degli spazi nel nome del file. 

Ho provato ancora alcuni anni più tardi, e non ha funzionato. Questo thread fornisce alcuni suggerimenti, ma la soluzione più rapida era eseguire come root (o eseguire un Sudo libreoffice). Non elegante, ma veloce. 

Utilizzare il comando scalc.exe in Windows

25
neves

Usa csvkit

in2csv data.xlsx > data.csv

Per i dettagli controlla i loro eccellenti documenti

24
Holger Brandl

Se il file .xlsx ha molti fogli, è possibile utilizzare il flag -s per ottenere il foglio desiderato. Per esempio:

xlsx2csv "my_file.xlsx" -s 2 second_sheet.csv

second_sheet.csv conterrebbe i dati del 2 ° foglio in my_file.xlsx.

7
Akavall

Un'altra opzione sarebbe quella di utilizzare R tramite un piccolo wrapper bash per comodità:

xlsx2txt(){
echo '
require(xlsx)
write.table(read.xlsx2(commandArgs(TRUE)[1], 1), stdout(), quote=F, row.names=FALSE, col.names=T, sep="\t")
' | Rscript --Vanilla - $1 2>/dev/null
}

xlsx2txt file.xlsx > file.txt
7
Holger Brandl

Usando l'applicazione Gnumeric spreadsheet che viene fornita da una utility a linea di comando chiamata ssconvert è davvero super semplice:

find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;

e hai finito!

4

Se è possibile eseguire la riga di comando di Java, è possibile farlo con Apache POI HSSF Excel Extractor . Ha un metodo main che dice di essere l'estrattore da riga di comando . Questo sembra solo scaricare tutto. Indicano a questo esempio che converte in CSV . Dovresti compilarlo prima di poterlo eseguire, ma anch'esso ha un metodo main, quindi non dovresti fare molta codifica di per sé per farlo funzionare.

Un'altra opzione che potrebbe volare ma richiederà un po 'di lavoro dall'altra parte è di farti venire i file Excel come dati XML Excel o XML ​​Spreadsheet di qualunque MS chiama quel formato in questi giorni. Aprirà un intero nuovo mondo di opportunità per voi di affettarlo e tagliarlo come volete.

3
Pavel Veller

Come altri hanno detto, libreoffice può convertire i file xls in csv. Il problema per me era la selezione del foglio.

Questo script Python libreoffice fa un buon lavoro nella conversione di un singolo foglio in CSV.

L'utilizzo è:

./libreconverter.py File.xls:"Sheet Name" output.csv

L'unico lato negativo (sulla mia estremità) è che --headless non sembra funzionare. Ho una finestra LO che si presenta per un secondo e poi si chiude.
Va bene con me, è l'unico strumento che fa il lavoro rapidamente.

0
Benoit Duffez