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 car je regarde le traitement de plusieurs millions de lignes, j'ai donc besoin de quelque chose de rapide. J'ai trouvé un programme sur les dépôts Ubuntu appelé xls2csv mais il ne convertira que les fichiers xls (Office 2003) (que j'utilise actuellement) mais j'ai besoin de prise en charge pour les fichiers Excel plus récents.
Des idées?
Réponses:
L' application de feuille de calcul Gnumeric est livrée avec un utilitaire de ligne de commande appelé ssconvert qui peut convertir entre une variété de formats de feuille de calcul:
Pour installer sur Ubuntu:
Pour installer sur Mac:
la source
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
La méthode LibreOffice pourrait probablement traiter d'autres formats, mais je ne pouvais pas la faire fonctionner (elle ouvrirait simplement un fichier vierge à chaque fois, même avec l'--headless
argument).apt-get install gnumeric --no-install-recommends
. Le seul inconvénient est qu'il déclenche de nombreux avertissements GConf-WARNING **: le client n'a pas pu se connecter au démon D-BUS lors de son exécution. Un simplessconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
fera l'affaire.-S
drapeau écrive plusieurs feuilles. Chacun va dans son propre fichier.ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
.Vous pouvez le faire avec LibreOffice:
Pour des raisons qui ne me paraissent pas claires, vous devrez peut-être exécuter ceci avec sudo. Vous pouvez faire fonctionner LibreOffice avec sudo sans avoir besoin d'un mot de passe en ajoutant cette ligne à votre fichier sudoers:
la source
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
travaillé sur OS X pour moi.--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
. Voir le wiki du bureau ouvert pour plus de détails.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 dizaines de dépendances que vous devez également installer.
J'ai trouvé cette alternative Python:
https://github.com/dilshod/xlsx2csv
A pris 2 secondes pour installer et fonctionne comme un charme.
Si vous disposez de plusieurs feuilles, vous pouvez les exporter toutes à la fois, ou une à la fois:
Il établit également des liens vers plusieurs alternatives intégrées à Bash, Python, Ruby et Java.
la source
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/prettytable-0.7.2-py2.7.egg/EGG-INFO/top_level.txt'
). Maintenant que j'y pense, j'ai eu la même erreur aveccsvkit
.xlsx2csv
paquet, vous n'avez donc pas besoin de l'installer manuellement,easy_install
mais vous pouvez utiliser votre gestionnaire de paquets.sudo easy_install xlsx2csv
En bash, j'ai utilisé cette commande libreoffice pour convertir tous mes fichiers xlsx dans le répertoire courant:
Il prend soin des espaces dans le nom de fichier.
Réessayé quelques années plus tard, et cela n'a pas fonctionné. Ce fil donne quelques conseils, mais la solution la plus rapide a été de s'exécuter en tant que root (ou en exécutant a
sudo libreoffice
). Pas élégant, mais rapide.Utilisez la commande scalc.exe dans Windows
la source
scalc.exe
plutôt quelibreoffice
. A travaillé pour moi aujourd'hui sur la version LO stable actuelle.Utilisez csvkit
Pour plus de détails, consultez leurs excellents documents
la source
Une autre option serait d'utiliser R via un petit wrapper bash pour plus de commodité:
la source
Si le
.xlsx
fichier contient plusieurs feuilles, le-s
drapeau peut être utilisé pour obtenir la feuille souhaitée. Par exemple:second_sheet.csv
contiendrait les données de la 2ème feuille enmy_file.xlsx
.la source
L'utilisation de la feuille de calcul Gnumeric fournie avec un utilitaire de ligne de commande appelé ssconvert est en effet super simple:
et tu as fini!
la source
Si vous êtes d'accord pour exécuter la ligne de commande Java, vous pouvez le faire avec l' Extracteur Excel d'Apache POI HSSF . Il a une
main
méthode qui dit être l'extracteur de ligne de commande . Celui-ci semble simplement tout déverser. Ils soulignent cet exemple qui se convertit en CSV . Vous devrez le compiler avant de pouvoir l'exécuter, mais il a aussi unmain
méthode, vous ne devriez donc 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 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 formatent ces jours-ci. Cela vous ouvrira un tout nouveau monde d'opportunités pour le découper et le découper comme vous le souhaitez.
la source
Comme d'autres l'ont dit,
libreoffice
peut convertir des fichiers xls en csv. Le problème pour moi était la sélection des feuilles.Ce script Python libreoffice fait un excellent travail pour convertir une seule feuille en CSV.
L'utilisation est:
Le seul inconvénient (de mon côté) est que
--headless
cela ne semble pas fonctionner. J'ai une fenêtre LO qui apparaît pendant une seconde puis se ferme.Ça ne me dérange pas, c'est le seul outil qui fait le travail rapidement.
la source