Comment imprimer les noms de feuille d'une feuille de calcul à l'aide de la ligne de commande Linux?

11

Je sais utiliser in2csvpour enregistrer une feuille de calcul particulière en tant que .csv:

in2csv --sheet "sheet name" file1.xls > sheet-name.csv

Mais existe-t-il d'autres outils pour simplement imprimer les noms de feuille?

Peut-être qu'il y a des options avec Perl?

csheth
la source

Réponses:

11

in2csvfournit l' option --namesou -npour cela: [ Source ]

 -n, --names     Display sheet names from the input Excel file.

Dans votre exemple, la commande serait:

in2csv -n file1.xls

Il s'avère que cette fonctionnalité n'a été ajoutée que dans la version csvkit1.0.2, qui n'est pas encore disponible dans les sources officielles du package . Vous devez soit

  • compiler le programme à partir de la source ou
  • installez-le via pipavec

    sudo pip install csvkit
    

pour obtenir la dernière version.

dessert
la source
J'aurais accepté cette réponse mais il s'avère que j'ai une version de l' option in2csvmanquante -n. Bizarre, essayant de comprendre comment obtenir la dernière version mais ayant des problèmes avec csvkit et en supprimant les plus anciens in2csv... soupir
csheth
2
Je l'enlèverais simplement avec sudo apt remove python3-csvkitet j'installerais un plus récent, de préférence à partir de packages.ubuntu.com , ou bien à partir de github.com/wireservice/csvkit/tree/1.0.2 . La fonctionnalité a été introduite avec cette validation marquée «1.0.2», donc toute version à partir de celle-ci devrait avoir cette option.
dessert
Malheureusement, il semble qu'aucune des versions packagées n'atteigne ce numéro de version, donc la compilation de la source à partir de github semble être la seule façon de procéder - dans ce cas, je préfère ne pas désinstaller la version du package, mais simplement écrire une fonction wrapper nommée in2csvthat appelle /path/to/new/in2csvau cas où il est appelé avec l' -noption et le /usr/bin/in2csvreste habituel .
dessert
1
D'accord. J'ai utilisé sudo apt remove python3-csvkit, installé le plus récent et cela a fonctionné. La fonction wrapper est très utile oui!
csheth
8

in2csvest l'option la plus simple, mais je laisserai cela au cas où quelqu'un pourrait le trouver utile. Il y a une belle commande appelée xlhtmlpour convertir des fichiers XLS en HTML ou XML. Et une fois que vous avez le XML, divers outils de traitement XML peuvent être utilisés pour effectuer une grande variété de requêtes sur celui-ci. Dans ce cas:

$ xlhtml -xml ~/foo.xls | xmlstarlet sel -t -m '//pagetitle' -v . -n
Sheet1
Sheet2

Le XML qui xlhtmlgénère est comme ceci:

<?xml version="1.0" encoding="iso-8859-1" ?>
<excel_workbook>
    <sheets>
        <sheet>
            <page>0</page>
            <pagetitle>Sheet1</pagetitle>
            <firstrow>0</firstrow>
            <lastrow>11</lastrow>
            <firstcol>0</firstcol>
            <lastcol>0</lastcol>

Ainsi, pour les noms de feuille, nous pouvons interroger les pagetitlenœuds, pour lesquels j'ai utiliséxmlstarlet .

muru
la source
+1 Excellente solution, je suis vraiment désolé d'avoir trouvé l'ennuyeux. ; P
dessert
Il n'est pas disponible pour 16.04 Xenial. Peut-être utile de l'ajouter à votre réponse?
csheth