excel ssconvert - Convertir xlsx en csv dans la ligne de commande linux




to line (10)

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.

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?


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

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

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

A pris 2 secondes pour installer et fonctionne comme un charme.

Si vous avez plusieurs feuilles, vous pouvez les exporter toutes en même temps, ou une à 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.


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.


En utilisant la feuille de calcul Gnumeric qui vient avec un utilitaire de ligne de commande appelé ssconvert est en effet super simple:

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

et tu as fini!


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.


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 .


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

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


Pour obtenir la bonne propriété, vous pouvez définir le bit setuid de groupe sur le répertoire avec

chmod g+rwxs dirname

Cela garantira que les fichiers créés dans le répertoire appartiennent au groupe. Vous devriez alors vous assurer que tout le monde fonctionne avec umask 002 ou 007 ou quelque chose de ce genre --- c'est pourquoi Debian et de nombreux autres systèmes linux sont configurés avec des groupes par utilisateur par défaut.

Je ne connais pas de moyen de forcer les permissions que vous voulez si l'umask de l'utilisateur est trop fort.





linux excel csv converter xlsx