Convertir xlsx csv dans Linux en ligne de commande
Je suis à la recherche d'un moyen de convertir des fichiers xlsx vers des fichiers csv sur Linux.
Je ne veux pas utiliser PHP/Perl ou quelque chose comme ça depuis que je suis à la recherche de traitement de plusieurs millions de lignes, donc j'ai besoin de quelque chose de rapide. J'ai trouvé un programme sur le Ubuntu repos appelé xls2csv mais il ne convertir xls (Office 2003) fichiers (que j'utilise actuellement), mais j'ai besoin d'aide pour les nouveaux fichiers Excel.
Des idées?
- Penser que quoi que ce soit mis en œuvre avec un langage de script est lente par nature semble... un peu erronée, en particulier depuis l'intéressant les bibliothèques, dans les langues ont tendance à avoir des backends écrit en C.
- Excel utilisé pour être limitée à 65 536 lignes. Maintenant, il est de 1 048 576 octets (support.microsoft.com/kb/120596). il va être difficile de s'adapter à "rompre millions de lignes" en elle. juste pour dire...
- pourrait être sur plusieurs fichiers.
- ...personnellement, je le ferais à l'aide de la xlsv bibliothèque pour Python, mais depuis les scripts basés sur les approches sont décrites comme étant hors de question... haussement d'épaules. (Comment est-il une programmation à la question si les instruments de programmation sont exclus de la réponse?)
- Je suis actuellement en utilisant une bibliothèque PHP pour ce faire, et ce qui se xls2csv 1 seconde à faire, prend php 10 minutes à faire. Littéralement.
- Je crois que c' -- PHP est un délire des tas de... bien. Mais juste parce que vous avez une très mauvaise PHP bibliothèque, ce n'est pas une raison valable pour écrire de toutes les langages interprétés.
- (err, que le nom de la bibliothèque doit avoir été xslw, pas xlsv)
Vous devez vous connecter pour publier un commentaire.
La Gnumeric application de feuille de calcul est livré avec un utilitaire de ligne de commande appelé ssconvert qui peut convertir entre une variété de formats de feuille de calcul:
Pour l'installer sur Ubuntu:
À installer sur le Mac:
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
LibreOffice méthode pourrait probablement d'autres formats, mais je ne pouvais pas le faire fonctionner (il serait tout simplement d'ouvrir un fichier vide à chaque fois, même avec le--headless
argument).apt-get install gnumeric --no-install-recommends
. Le seul inconvénient est qu'il déclenche beaucoup d'avertissements GConf-WARNING **: Client n'a pas réussi à se connecter à D-BUS démon lors de l'exécution. Un simplessconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
fera l'affaire.gnumeric-1.12.17-20140610.exe
(pas de cygwin) et il fonctionne parfaitement.-S
drapeau à écrire plusieurs feuilles. Chacun va à son propre fichier.$ ssconvert -O 'separator=;' file.csv file.xlsx
ou$ ssconvert -O 'separator=; format=raw' file.csv file.xlsx
ne fonctionnent pas.ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
.Vous pouvez faire cela avec LibreOffice:
Pour des raisons pas claires pour moi, vous pourriez avoir besoin pour exécuter cette avec sudo. Vous pouvez faire LibreOffice travailler avec sudo sans exiger un mot de passe en ajoutant cette ligne à vous sudoers:
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
travaillé sur OS X pour moi.libreoffice --convert-to
fonctionne bien pour convertir un format de feuille de calcul et un autre (je l'utilise pour lire .xlsb fichiers, en les convertissant .xls en premier). Mais pour l'écriture dans un fichier CSV, il est limité à la sortie de la première feuille seulement.--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
. Voir open office wiki pour plus de détails.xlsx2csv
si vous avez besoin que. Lexlsx2csv
outil a la-s
ou--sheet
option que vous pouvez utiliser pour sélectionner la feuille (0 signifie "toutes les feuilles" et la valeur par défaut est 1).xlsx2csv
est emballé dans populaire des distributions Linux comme Debian, Ubuntu et Arch Linux../libreconverter.py Spreadsheet.xls:"Sheet Name" output.csv
.ssconvert
réponse a résolu le problème.Si vous disposez déjà d'un environnement de Bureau alors je suis sûr que Gnumeric /LibreOffice qui fonctionne bien, mais sur un serveur headless (Amazon Web Services), ils nécessitent des dizaines de dépendances que vous avez aussi besoin d'installer.
J'ai trouvé ce Python alternative:
https://github.com/dilshod/xlsx2csv
A pris 2 secondes pour installer et fonctionne comme un charme.
Si vous avez plusieurs feuilles, vous pouvez exporter tous à la fois, ou une à la fois:
Il a également des liens vers plusieurs alternatives construites dans Bash, Python, Ruby, Java et.
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, je me suis fait la même erreur aveccsvkit
.xlsx2csv
paquet, de sorte que vous n'avez pas besoin de l'installer manuellement viaeasy_install
mais pouvez utiliser votre gestionnaire de paquets.En bash, j'ai utilisé cette libreoffice commande pour convertir tous mes fichiers xlsx dans le répertoire courant:
Il prend soin de les espaces dans le nom de fichier.
Essayé de nouveau quelques années plus tard, et ça ne fonctionne pas. Ce fil donne quelques conseils, mais la quickiest solution était de s'exécuter en tant que root (ou de l'exécution d'un
sudo libreoffice
). Pas très élégant, mais rapide.Utiliser la commande scalc.exe dans Windows
scalc.exe
plutôt quelibreoffice
. A travaillé pour moi aujourd'hui sur la version stable actuelle LO version.Utilisation csvkit
Pour plus de détails consulter leur excellente docs
Une autre option serait d'utiliser R via un petit bash wrapper pour plus de commodité:
Si
.xlsx
fichier a beaucoup de feuilles,-s
indicateur peut être utilisé pour obtenir la feuille que vous voulez. Par exemple:second_sheet.csv
devrait contenir des données de la 2ème feuille dansmy_file.xlsx
.À l'aide de la Gnumeric application de feuille de calcul qui vient qui un de l'utilitaire de ligne de commande appelé ssconvert est en effet super simple:
et vous avez terminé!
Si vous êtes OK pour exécuter Java en ligne de commande, alors vous pouvez le faire avec Apache POI HSSF de Excel Extracteur. Il a un
principal
méthode qui dit être la ligne de commande de l'extracteur. Celui-ci semble juste dump tout. Ils soulignent à cet exemple convertit au format CSV. Vous devrez compiler avant de pouvoir l'exécuter, mais il a aussi unemain
méthode de sorte que vous ne devriez pas avoir à faire beaucoup de codage en soi pour le faire fonctionner.Une autre option qui peut voler, mais a besoin de quelques travaux sur l'autre extrémité est de faire de vos fichiers Excel venir à vous comme Excel de Données XML ou Feuille de calcul XML de ce que MS appels que le format de ces jours. Il va ouvrir un tout nouveau monde de possibilités pour vous de trancher et couper en dés la façon dont vous le souhaitez.
Comme les autres ont dit,
libreoffice
peut convertir les fichiers xls 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.
D'Usage:
Le seul bémol (de mon côté), c'est que
--headless
ne semble pas fonctionner. J'ai un LO fenêtre qui s'affiche pendant une seconde et puis s'en va.C'est OK avec moi, c'est le seul outil qui fait le travail rapidement.