Ubuntu – Commandline tool for viewing xls files

command line

Is there a commandline tool for viewing/opening excel (.xls) files?

So the answer works great unless the worksheets don't have a custom name.

When I try to open the file, I get:

Traceback (most recent call last):
  File "/usr/bin/py_xls2csv", line 17, in <module>
    for sheet_name, values in parse_xls(arg, 'cp1251'): # parse_xls(arg) -- default encoding
  File "/usr/lib/python2.5/site-packages/pyExcelerator/ImportXLS.py", line 334, in parse_xls
    raise Exception, 'No workbook stream in file.'
Exception: No workbook stream in file.

However, if I open up the file and rename the sheet to 'test' or something it works fine. What do I need to tweak so that it can handle the default names? (Sheet1, etc)

The file I'm trying to open at present has only 1 sheet, named Sheet1.

Best Answer

Yeah it's a little bit hacky though. Let's start by installing two packages:

sudo apt-get install python-excelerator w3m

From there, we use a script that comes bundled with python-excelerator to convert the document into a HTML file. We then pipe that into a command line browser (w3m) and display it.

py_xls2html spreadsheet.xls 2>/dev/null | sed 's/"//g' | w3m -dump -T 'text/html'

You can create a bash function or alias with that if you don't want to keep typing it. It should give you output like this:

Sheet = Sheet1
┏━━━━┯━━━┯━━━━━┯━━━━━━━━━━━━┓
┃this│is │a    │spreadsheet ┃
┠────┼───┼─────┼────────────┨
┃it  │is │very │nice        ┃
┠────┼───┼─────┼────────────┨
┃this│has│three│rows        ┃
┗━━━━┷━━━┷━━━━━┷━━━━━━━━━━━━┛
Sheet = Sheet2 Sheet = Sheet3

Very pretteh. Obviously this isn't going to support any sort of macro, editing or any interactivity. This is purely a viewer. You could also work at stripping out the quotation marks that wrap things. I'm not particularly bothered by them at this point.

If you don't need it to be as tabular you could simply have something like this:

py_xls2csv spreadsheet.xls 2>&1 | less

You can go one further than that and display it in a slightly nicer way:

py_xls2csv spreadsheet.xls 2>&1 | grep '^"' | sed 's/"//g' | column -s, -t | less -#2 -N -S

That gives you the following:

  1 this   is    a       spreadsheet
  2 it     is    very    nice
  3 this   has   three   rows
Related Question