Convertir xlsx en csv sous Linux avec une ligne de commande

je cherche un moyen de convertir des fichiers XLSX en fichiers csv sous Linux.

Je ne veux pas utiliser PHP/Perl ou quelque chose comme ça puisque je suis en train de traiter plusieurs millions de lignes, donc j'ai besoin de quelque chose de rapide. J'ai trouvé un programme sur les repos Ubuntu appelé xls2csv mais il ne convertira que les fichiers xls (Office 2003) (que j'utilise actuellement) mais j'ai besoin de soutien pour les nouveaux fichiers Excel.

des idées?

185
demandé sur Matthias Braun 2012-05-11 23:18:12

11 réponses

le Gnumeric l'application de tableur vient avec un utilitaire de ligne de commande appelé ssconvert qui peut convertir entre une variété de formats de tableur: "15198090920"

$ 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

à installer sur Ubuntu:

apt-get install gnumeric

à installer sur Mac:

brew install gnumeric
174
répondu jmcnamara 2017-06-22 05:03:16

vous pouvez le faire avec LibreOffice:

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

pour des raisons qui ne me sont pas claires, vous pourriez avoir besoin de gérer ça avec sudo. Vous pouvez faire fonctionner LibreOffice avec sudo sans avoir besoin d'un mot de passe en ajoutant cette ligne à votre fichier sudoers:

users ALL=(ALL) NOPASSWD: libreoffice
110
répondu spiffytech 2013-02-13 14:54:56

si vous avez déjà un environnement de bureau, je suis sûr que Gnumeric / LibreOffice fonctionnerait bien, mais sur un serveur sans tête (comme Amazon Web Services), ils nécessitent des douzaines de dépendances que vous devez également installer.

j'ai trouvé cette alternative Python:

https://github.com/dilshod/xlsx2csv

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

a mis 2 secondes à s'installer et fonctionne comme un charme.

si vous avez plusieurs feuilles vous pouvez exporter tout à la fois, ou un à la fois:

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

il établit également des liens vers plusieurs alternatives construites en Bash, Python, Ruby et Java.

94
répondu andrewtweber 2016-02-28 02:17:12

Use csvkit

in2csv data.xlsx > data.csv

pour plus de détails, vérifiez leur excellent docs

23
répondu Holger Brandl 2014-11-06 09:10:29

en bash, j'ai utilisé cette commande libreoffice pour convertir tous mes fichiers xlsx dans le répertoire courant:

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

il prend soin des espaces dans le nom de fichier.

a essayé de nouveau quelques années plus tard, et ça n'a pas fonctionné. ce thread donne quelques astuces, mais la solution la plus rapide a été d'exécuter en root (ou en lançant un sudo libreoffice ). Pas très élégant, mais rapide.

utilisez la commande scalc.exe dans Windows

22
répondu neves 2017-05-23 12:26:33

une autre option serait D'utiliser R via un petit emballage bash pour plus de commodité:

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 -  2>/dev/null
}

xlsx2txt file.xlsx > file.txt
7
répondu Holger Brandl 2014-09-02 15:03:26

si .xlsx fichier a de nombreuses feuilles, -s drapeau peut être utilisé pour obtenir la feuille que vous voulez. Par exemple:

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

second_sheet.csv contiendrait les données de la deuxième feuille de my_file.xlsx .

7
répondu Akavall 2014-11-12 21:43:58

si vous êtes D'accord pour lancer la ligne de commande Java, alors vous pouvez le faire avec Excel Extractor D'Apache POI HSSF . Il a a main méthode qui dit d'être l'extracteur de ligne de commande . Celui-ci semble juste vider tout. Ils soulignent à cet exemple qui convertit en CSV . Vous devrez compiler avant de pouvoir l'exécuter, mais il a aussi une main méthode de sorte que vous ne devriez pas avoir à faire beaucoup de codage en soi pour le faire fonctionner.

une autre option qui pourrait voler, mais nécessitera un certain travail à l'autre extrémité est de faire vos fichiers Excel venir à vous en tant que données Excel XML ou feuille de calcul XML de tout ce que MS appelle ce format ces jours-ci. Il ouvrira un tout nouveau monde d'occasions pour vous de trancher et de dés comme vous le voulez.

3
répondu Pavel Veller 2012-05-11 19:47:37

utilisant le Gnumeric application de tableur qui vient dont un utilitaire en ligne de commande appelé ssconvert est en effet super simple:

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

et c'est fini!

3
répondu Pascal-Louis Perez 2016-06-11 15:45:08

comme d'autres l'ont dit, libreoffice peut convertir des fichiers xls en csv. Le problème pour moi était la feuille de sélection.

Ce libreoffice script Python fait un excellent travail lors de la conversion d'une seule feuille au format CSV.

Usage:

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

le seul inconvénient (de mon côté) est que --headless ne semble pas fonctionner. J'ai une LO window qui se pointe une seconde et qui démissionne.

C'est D'accord avec moi, c'est le seul outil qui fait le travail rapidement.

0
répondu Benoit Duffez 2016-12-16 10:22:57

vous pouvez essayer le tableur Open/LibreOffice. Ce n'est pas un outil en ligne de commande mais il y a de fortes chances qu'ils supportent xlsx. Voir www.libreoffice.org/features/calc / . Il mentionne le support xlsx.

-1
répondu Burton Samograd 2012-05-11 20:09:24