Comment diviser un fichier tableur ODS en fichiers csv par feuille sur le terminal?

Je souhaite diviser une feuille de calcul (ods ou xlsx) en plusieurs fichiers csv, un pour chaque feuille de la feuille de calcul.

Je voudrais faire cela sans lancer une application graphique et de préférence dans un one liner.

Des idées?

Bien que le doublon lié offre une solution possible dans l’une des réponses (mais pas dans celle acceptée) et a été utile. La solution ne fonctionne pas avec les fichiers ODS comme je l’avais demandé et j’estime que la question est suffisamment différente.

Bien, libreoffice peut convertir des documents à partir d’un script (c’est-à-dire en mode sans interface graphique sans ouvrir une interface graphique). Pour convertir tout format de feuille de calcul au format CSV, sa forme la plus simple ressemblerait par exemple à

 libreoffice --convert-to csv PATH/TO/YOUR.ODS 

Cependant, cela prend juste la première feuille de votre document et la convertit, en ignorant toutes les autres. Il manque également une option pour sélectionner la feuille à convertir, malheureusement.


Nous allons donc avoir besoin d’un outil externe, comme xlsx2csv . C’est un script open source Python (2 et 3) qui convertit les fichiers XLSX en CSV et prend en charge l’extraction de toutes les feuilles dans des fichiers séparés.

Ubuntu est déjà livré avec Python installé, mais peut-être devez-vous d’abord installer pip , son gestionnaire de paquets. Je vais pour Python 3, mais vous pouvez changer toutes les commandes ci-dessous pour l’exécuter avec 2 aussi:

 sudo apt install python3-pip 

Ensuite, vous pouvez installer xlsx2csv avec pip3 dans le répertoire du paquet de votre utilisateur, en utilisant

 pip3 install --user xlsx2csv 

Après cela, le script exécutable peut être trouvé dans ~/.local/bin/xlsx2csv .


Maintenant, si vous ne l’avez pas déjà au format XLSX, convertissons cette feuille de calcul ODS avec libreoffice :

 libreoffice --convert-to xlsx PATH/TO/YOUR.ods 

Ensuite, nous utilisons xlsx2csv pour extraire toutes les feuilles. Il créera un dossier OUTPUTFOLDER et y placera tous les SHEETNAME.csv extraits:

 ~/.local/bin/xlsx2csv -a YOUR.xlsx OUTPUTFOLDER 

Utilisation de l’ xls2csv (pour convertir .XLS ) du paquet catdoc install sudo apt install catdoc :

 xls2csv -b ' ' EXCEL.xls | awk '{print >"sheet"NR}' RS='\n\n' 

xls2csv -b ' ' EXCEL.xls lit le fichier MS-Excel et place son contenu sous forme de données séparées par des virgules sur la sortie standard et avec -b STRING nous disons que les feuilles doivent être délimitées avec quels caractères (ou chaîne; nous avons défini ici).


Utilisez xlsx2csv (pour convertir .XLSX ); installer sudo apt install xlsx2csv :

 xlsx2csv -s 0 EXCEL.xlsx | awk '!/,/ { nextSheet++; next } { print >"sheet"nextSheet }' 

Le -s 0 signifie imprimer toutes les feuilles.

Jeter un coup d’œil à

 ssconvert -O 'separator=:: format=raw quoting-mode=never' -S x.ods out%n.txt 

\ merci {Bruni}

  • -O 'separator= format= ...' est utilisé pour contrôler les détails du format csv
  • -S pour créer un fichier de sortie différent pour chaque feuille