Как я могу распечатать имена таблиц с помощью командной строки Linux?

11

Я знаю, как использовать in2csvдля сохранения конкретного листа в формате .csv:

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

Но есть ли другие инструменты, чтобы просто напечатать имена листов?

Возможно, есть варианты с Perl?

csheth
источник

Ответы:

12

in2csvиз csvkitпакета предоставляет опцию --namesили -nдля этого: [ Source ]

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

В вашем примере команда будет:

in2csv -n file1.xls

Эта функция была добавлена ​​в csvkit1.0.2, которая недоступна в официальных источниках пакетов для выпусков старше Bionic. Если вы используете Xenial, вам нужно либо

  • скомпилировать программу из исходного кода или
  • установить его через pipс

    sudo pip install csvkit
    

чтобы получить последнюю версию.

Десерт
источник
Я бы принял этот ответ, но оказалось, что у меня не in2csvхватает -nварианта. Странно, пытаться выяснить, как получить последнюю версию, но возникли проблемы с csvkit и удалить старые in2csv...
sigh
2
Я бы просто удалил его sudo apt remove python3-csvkitи установил более новый, желательно с packages.ubuntu.com или с github.com/wireservice/csvkit/tree/1.0.2 . Функция была введена с этим коммитом, помеченным «1.0.2», поэтому любая версия с этого момента должна иметь эту опцию.
десерт
К сожалению, кажется , что ни один из коробочных версий не достигнут этого номер версии, поэтому скомпилировать исходный код из GitHub , кажется, единственный путь - в этом случае, я предпочел бы не удалить версии пакета , а просто написать функцию обертки с именем , in2csvчто звонки /path/to/new/in2csvв случае, если это вызвано с -nопцией и обычным /usr/bin/in2csvдругим.
десерт
1
ОК. Я использовал sudo apt remove python3-csvkit, установил новый, и это сработало. Функция-обертка очень полезна, да!
17
8

in2csvЭто более простой вариант, но я оставлю это на тот случай, если кто-то может найти это полезным. Есть хорошая команда xlhtmlдля преобразования файлов XLS в HTML или XML. И когда у вас есть XML, можно использовать различные инструменты обработки XML для выполнения самых разных запросов. В таком случае:

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

XML, который xlhtmlгенерирует, выглядит так:

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

Итак, для имен листов мы можем запросить pagetitleузлы, для которых я использовалxmlstarlet .

Мур
источник
Это не доступно для 16.04 Xenial. Может быть полезно добавить его в свой ответ?
csheth