如何使用Linux命令行打印电子表格的工作表名称?

我知道可以使用in2csv将特定的工作表保存为.csv文件: in2csv --sheet "工作表名称" file1.xls > 工作表名称.csv 但是还有其他工具可以仅打印工作表名称吗?
也许Perl有一些选项?
2个回答

in2csv来自csvkit包,提供了--names-n选项: [来源]

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

在你的例子中,命令应该是:
in2csv -n file1.xls

这个功能是在csvkit 1.0.2中添加的,对于早于Bionic版本的官方软件源来说是不可用的。如果你正在运行Xenial版本,你需要做以下两种选择之一:
  • 源代码编译程序或
  • 通过pip安装它,使用以下命令:

    sudo pip install csvkit
    

获取最新版本。


我本来会接受这个答案的,但事实证明我有一个缺少-n选项的in2csv版本。很奇怪,我正在努力弄清楚如何获取最新版本,但是在处理csvkit和删除旧的in2csv方面遇到了困难...唉。 - csheth
2我只需使用sudo apt remove python3-csvkit将其删除,并安装一个更新的版本,最好是从https://packages.ubuntu.com/或者https://github.com/wireservice/csvkit/tree/1.0.2下载。该功能是通过[此提交](https://github.com/wireservice/csvkit/commit/829e176929934bade37cd85dded91df3413b44db#diff-a14fd01737ab485de9d4254287a53055)引入的,标记为“1.0.2”,所以从那个版本开始的任何版本都应该具有此选项。 - dessert
很不幸的是,似乎没有任何打包版本达到这个版本号,所以从github编译源代码似乎是唯一的方法 - 在这种情况下,我宁愿卸载软件包版本,而只是编写一个名为in2csv的包装函数,如果使用-n选项调用,则调用/path/to/new/in2csv,否则调用通常的/usr/bin/in2csv - dessert
1好的。我使用了 sudo apt remove python3-csvkit 命令,安装了更新版本,并且它起作用了。这个包装函数非常有用,没错! - csheth

in2csv是更简单的选择,但我会保留这个选项,以防有人觉得有用。有一个很好的命令xlhtml可以将XLS文件转换为HTML或XML。一旦你有了XML,可以使用各种XML处理工具对其进行各种查询。在这种情况下:

$ xlhtml -xml ~/foo.xls | xmlstarlet sel -t -m '//pagetitle' -v . -n
Sheet1
Sheet2
xlhtml生成的XML如下所示:
<?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