Friday, April 19, 2024
22
rated 0 times [  22] [ 0]  / answers: 1 / hits: 43676  / 1 Year ago, mon, april 10, 2023, 1:30:32

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.


More From » command-line

 Answers
1

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

[#44742] Monday, April 10, 2023, 1 Year  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
ligenvirt

Total Points: 238
Total Questions: 98
Total Answers: 100

Location: Senegal
Member since Fri, Aug 21, 2020
4 Years ago
ligenvirt questions
Tue, Aug 17, 21, 02:28, 3 Years ago
Thu, Sep 23, 21, 17:55, 3 Years ago
Mon, Oct 18, 21, 03:34, 3 Years ago
;