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.