Come posso stampare i nomi dei fogli di un foglio di calcolo usando la riga di comando di Linux?


11

Sono a conoscenza dell'utilizzo in2csvper salvare un determinato foglio di lavoro come .csv:

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

Ma ci sono altri strumenti per stampare solo i nomi dei fogli?

Forse ci sono opzioni con Perl?

Risposte:


12

in2csvdal csvkitpacchetto fornisce l' opzione --nameso -nper quello: [ Sorgente ]

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

Nel tuo esempio il comando sarebbe:

in2csv -n file1.xls

Questa funzione è stata aggiunta in csvkit1.0.2, che non è disponibile dalle fonti dei pacchetti ufficiali per le versioni precedenti a Bionic. Se usi Xenial devi farlo

  • compilare il programma dal sorgente o
  • installalo via pipcon

    sudo pip install csvkit
    

per ottenere l'ultima versione.


Avrei accettato questa risposta, ma risulta che ho una versione di opzione in2csvcarente -n. Strano, cercando di capire come ottenere le ultime novità ma avendo problemi con csvkit e la rimozione di vecchi in2csv... sigh
csheth,

2
Lo rimuoverei con sudo apt remove python3-csvkite ne installerei uno più recente, preferibilmente da packages.ubuntu.com , oppure da github.com/wireservice/csvkit/tree/1.0.2 . La funzione è stata introdotta con questo commit taggato “1.0.2”, quindi qualsiasi versione da quella in poi dovrebbe avere questa opzione.
dessert,

Sfortunatamente sembra che nessuna delle versioni in pacchetto raggiunga questo numero di versione, quindi la compilazione del sorgente da github sembra essere l'unica strada da percorrere - in questo caso, preferirei non disinstallare la versione del pacchetto ma scrivere semplicemente una funzione wrapper in2csvche si chiama così chiama /path/to/new/in2csvnel caso sia chiamato con l' -nopzione e il solito /usr/bin/in2csvaltro.
dessert,

1
ok. Ho usato sudo apt remove python3-csvkit, installato quello più recente e ha funzionato. La funzione wrapper è molto utile sì!
csheth,

8

in2csvè l'opzione più semplice, ma la lascerò nel caso qualcuno la trovasse utile. C'è un bel comando chiamato xlhtmlper convertire i file XLS in HTML o XML. E una volta ottenuto l'XML, è possibile utilizzare vari strumenti di elaborazione XML per eseguire una vasta gamma di query su di esso. In questo caso:

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

L'XML che xlhtmlgenera è così:

<?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>

Quindi, per i nomi dei fogli, possiamo interrogare i pagetitlenodi, per i quali ho usatoxmlstarlet .


Non è disponibile per 16.04 Xenial. Forse utile aggiungerlo alla tua risposta?
csheth,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.