11

I am aware of using in2csv to save a particular worksheet as a .csv:

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

But are there any other tools to just print the sheetnames?

Perhaps there are options with Perl?

13

in2csv from the csvkit package provides the --names or -n option for that: [Source]

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

In your example the command would be:

in2csv -n file1.xls

This feature was added in csvkit 1.0.2, which is not available from the official package sources for releases older than Bionic. If you’re running Xenial you need to either

  • compile the program from source or
  • install it via pip with

    sudo pip install csvkit
    

to get the latest version.

4
  • I would have accepted this answer but turns out I have a version of in2csv lacking -n option. Weird, trying to figure out how to get the latest but having trouble with csvkit and removing older in2csv ... sigh
    – csheth
    Nov 3 '17 at 11:32
  • 2
    I'd just remove it with sudo apt remove python3-csvkit and install a newer one, preferably from packages.ubuntu.com, or else from github.com/wireservice/csvkit/tree/1.0.2. The feature was introduced with this commit tagged “1.0.2”, so any version from that on should have this option.
    – dessert
    Nov 3 '17 at 11:40
  • Unfortunately it seems that none of the packaged versions reach this version number, so compiling the source from github seems to be the only way to go – in this case, I'd rather not uninstall the package version but just write a wrapper function named in2csv that calls /path/to/new/in2csv in case it's called with the -n option and the usual /usr/bin/in2csv else.
    – dessert
    Nov 3 '17 at 11:51
  • 1
    ok. I used sudo apt remove python3-csvkit , installed the newer one and it worked. The wrapper function is very useful yes!
    – csheth
    Nov 3 '17 at 11:56
8

in2csv is the simpler option, but I'll leave this in case somebody might find it useful. There's a nice command called xlhtml for converting XLS files to HTML or XML. And once you have the XML, various XML processing tools can be used to do a wide variety of queries on it. In this case:

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

The XML that xlhtml generates is like so:

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

So, for the sheet names, we can query the pagetitle nodes, for which I used xmlstarlet.

1
  • It isn't available for 16.04 Xenial. Maybe useful to add it to your answer?
    – csheth
    Nov 5 '17 at 6:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.