xlsx2csv - Convertir xlsx en csv dans la ligne de commande linux




xlsx2csv perl (8)

Je cherche un moyen de convertir les fichiers xlsx en fichiers csv sous linux, je ne veux pas utiliser PHP / Perl ou quoi que ce soit d'autre puisque je suis en train de traiter plusieurs millions de lignes, j'ai donc besoin de quelque chose rapidement. J'ai trouvé un programme sur le repo d'ubuntu appelé xls2csv mais il ne convertira que les fichiers xls (Office 2003) (que j'utilise actuellement) mais, j'ai besoin d'ajouter un support pour les nouveaux fichiers Excel, des idées?


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

Ce script Python libreoffice fait un bon travail pour convertir une seule feuille en CSV.

L'utilisation est:

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

Le seul inconvénient (sur mon extrémité) est que - sans --headless ne semble pas fonctionner. J'ai une fenêtre LO qui apparaît pendant une seconde puis se ferme.
C'est bon pour moi, c'est le seul outil qui fait le travail rapidement.


Dans 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.

Essayé encore quelques années plus tard, et cela n'a pas fonctionné. Ce fil donne quelques astuces, mais la solution la plus rapide consistait à utiliser root (ou à exécuter un sudo libreoffice ). Pas élégant, mais rapide.

Utilisez la commande scalc.exe dans Windows


L'application de feuille de calcul Gnumeric est fournie avec un utilitaire de ligne de commande appelé ssconvert qui peut convertir entre une variété de formats de feuilles de calcul:

$ 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

Pour installer sur Ubuntu:

apt-get install gnumeric

Pour installer sur Mac:

brew install gnumeric

Si le fichier .xlsx contient plusieurs feuilles, l' -s peut être utilisée pour obtenir la feuille désirée. Par exemple:

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

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


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

Une autre option qui pourrait voler mais qui nécessitera du travail à l'autre extrémité est de faire en sorte que vos fichiers Excel vous parviennent sous forme de données XML Excel ou de feuille de calcul XML de tous les appels MS qui prennent ces formats de nos jours. Cela ouvrira un tout nouveau monde d'opportunités pour que vous puissiez le découper et le découper comme vous le souhaitez.


Une autre option serait d'utiliser R via un petit wrapper 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 - $1 2>/dev/null
}

xlsx2txt file.xlsx > file.txt

Vous pouvez essayer la feuille de calcul Open / LibreOffice. Ce n'est pas un outil de ligne de commande, mais il y a de bonnes chances qu'ils supporteront xlsx. Voir www.libreoffice.org/features/calc/ . Il mentionne le support xlsx.


Vous pouvez le faire avec LibreOffice:

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

Pour des raisons qui ne me sont pas claires, vous devrez peut-être exécuter ceci avec sudo. Vous pouvez faire fonctionner LibreOffice avec sudo sans nécessiter de mot de passe en ajoutant cette ligne dans votre fichier sudoers:

users ALL=(ALL) NOPASSWD: libreoffice




xlsx