Convertir xlsx en xls dans un script shell linux

14

J'ai besoin de convertir le fichier ".xlsx" en ".xls" à l'aide de la commande shell.

Dans mon travail, nous utilisons actuellement la commande xlsx2csv, mais maintenant l'exigence a été modifiée et nous devons convertir tous les fichiers ".xlsx" en fichiers ".xls" pour un calcul supplémentaire.

Pour cela, un gars de mon travail a développé une commande qui peut convertir ".xlsx" en ".xls" mais, cela ne s'applique qu'à une seule feuille.

Nous avons plusieurs feuilles dans un seul fichier.

Merci d'avance....

Prem Joshi
la source
Cela peut également être fait en utilisant la bibliothèque pyxl, cela fait le contraire: stackoverflow.com/questions/9918646/how-to-convert-xls-to-xlsx
Mark

Réponses:

20

Si vous installez LibreOffice, vous pouvez utiliser la commande suivante:

libreoffice --headless --convert-to xls myfile.xlsx

ou juste:

libreoffice --convert-to xls myfile.xlsx

dans la version récente (> = 4.5) où l' --convert-toimplique --headless.

Cela créera myfile.xls et conservera le fichier myfile.xlsx d' origine . Vous devrez donc probablement effectuer un nettoyage après avoir validé la conversion.

forquare
la source
Cette option est très bonne, mais je pense qu'il y a un problème, elle ouvre l'instance libreoffice puis la convertit en fichier ".xls". Existe-t-il une autre option qui n'ouvrira pas libreoffice et pourra toujours se convertir en fichier ".xls"? Peux-tu m'aider avec ceci ? @forquare
Prem Joshi
1
La page Man @PremJoshi dit: "[--convert-to] implique --headless." donc l'interface graphique n'est pas ouverte. Cependant, lorsque vous le lancez pour la première fois après le démarrage, il peut afficher un écran de démarrage ou quelque chose comme ça pendant qu'il enregistre des services (en fonction de votre bureau).
lgeorget
1
@Igeorget! l'option "--headless" a fonctionné pour moi! c'était la réponse exacte à ma question.
Prem Joshi
3
Le commit qui a --convert-toimpliqué --headlessest gerrit.libreoffice.org/… (version 4.4). Dans les versions précédentes, les deux options doivent être passées.
lgeorget
1
Soyez conscient de la limite de ligne au format xls 65535, car cette commande n'affiche aucun message d'avertissement si le fichier xlsx dépasse cette limite (elle affichera un fichier de ligne 65535 qui ne correspond pas à l'original, sans avertissement)
golimar
6

vous pouvez également essayer ssconvertl'outil de conversion compagnon de gnumeric

ssconvert in.xlsx out.xls

(comme d'habitude, voir man ssconvert)

Pour les cas normaux , c'est très bien. Si le fichier d'entrée est très avancé dans les deux convertisseurs (libreoffice et gnumeric), certains détails peuvent être perdus.

JJoao
la source