Bagaimana saya bisa mencetak nama sheet dari spreadsheet menggunakan Linux command-line?

11

Saya sadar menggunakan in2csvuntuk menyimpan lembar kerja tertentu sebagai .csv:

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

Tetapi apakah ada alat lain untuk hanya mencetak nama lembar?

Mungkin ada opsi dengan Perl?

csheth
sumber

Jawaban:

11

in2csvmenyediakan --namesatau -npilihan untuk itu: [ Sumber ]

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

Dalam contoh Anda perintahnya adalah:

in2csv -n file1.xls

Ternyata fitur ini hanya ditambahkan di csvkit1.0.2, yang belum tersedia dari sumber paket resmi . Anda juga perlu

  • kompilasi program dari sumber atau
  • instal via pipdengan

    sudo pip install csvkit
    

untuk mendapatkan versi terbaru.

pencuci mulut
sumber
Saya akan menerima jawaban ini tetapi ternyata saya memiliki versi opsi yang in2csvkurang -n. Aneh, mencoba mencari cara untuk mendapatkan yang terbaru tetapi mengalami masalah dengan csvkit dan menghapus in2csv... sigh
csheth
2
Saya baru saja menghapusnya sudo apt remove python3-csvkitdan menginstal yang lebih baru, lebih disukai dari packages.ubuntu.com , atau yang lain dari github.com/wireservice/csvkit/tree/1.0.2 . Fitur ini diperkenalkan dengan komit ini ditandai "1.0.2", jadi versi apa pun dari pada harus memiliki opsi ini.
hidangan penutup
Sayangnya sepertinya tidak ada versi paket yang mencapai nomor versi ini, jadi mengkompilasi sumber dari github tampaknya menjadi satu-satunya cara untuk pergi - dalam hal ini, saya lebih suka tidak menghapus versi paket tetapi hanya menulis fungsi pembungkus bernama in2csvitu panggilan /path/to/new/in2csvjika dipanggil dengan -nopsi dan yang /usr/bin/in2csvlain biasa .
hidangan penutup
1
baik. Saya menggunakan sudo apt remove python3-csvkit, menginstal yang lebih baru dan berhasil. Fungsi wrappernya sangat bermanfaat ya!
csheth
8

in2csvadalah pilihan yang lebih sederhana, tetapi saya akan meninggalkan ini jika seseorang mungkin merasa berguna. Ada perintah yang bagus xlhtmluntuk mengkonversi file XLS ke HTML atau XML. Dan begitu Anda memiliki XML, berbagai alat pemrosesan XML dapat digunakan untuk melakukan berbagai macam pertanyaan di dalamnya. Pada kasus ini:

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

XML yang xlhtmlmenghasilkan seperti:

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

Jadi, untuk nama sheet, kita bisa query pagetitlenode, yang saya gunakanxmlstarlet .

muru
sumber
+1 Solusi luar biasa, saya sangat menyesal telah menemukan yang membosankan. ; P
hidangan penutup
Ini tidak tersedia untuk 16,04 Xenial. Mungkin bermanfaat untuk menambahkannya ke jawaban Anda?
csheth