Commandline tool for viewing xls files
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.
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
Here is a method which maintains the Unicode characters.
ie. it displays आ
, rather than dislaying the Unicode Codepoint value \U0906
The script uses OpenOffice.org and PyODConverter.py to convert one OOo document format into other OOo format. The conversion types are based on the filename extensions:
- pdf html odt doc txt ods xls csv odp ppt swf
#
oextn="html" # output type
ifile="My_OOo_File" ;echo ifile="$ifile"
ofile="$ifile.$oextn" ;echo ofile="$ofile"
[[ -f "$ofile" ]] && { rm "$ofile"; }
[[ -f "$ofile" ]] && { echo "A pre-existing Output file was NOT removed" ;exit; }
#
sofport=8100
soffice="$(locate -br "^soffice.bin$")"
soffarg=( '-invisible' '-accept=socket,port='$sofport';urp;' )
soffrex="$soffice ${soffarg[@]}"
#
soffpid=$(($(pgrep -f -n "$soffice")))
((soffpid!=0)) && { echo "A OpenOffice is already running. PID=$soffpid" ;exit; }
#
# Start OpenOffice
"$soffice" "${soffarg[@]}" &
soffpid=$(($(pgrep -f -n "$soffrex")))
((soffpid== 0)) && { echo "A OpenOffice has not started yet=$soffpid" ;exit; }
#
# Start OpenOffice
echo "** Attempting to connect to OpenOffice.org on port $sofport"
x=1; while ((x!=0)) ;do
/usr/bin/python "$(which DocumentConverter.py)" "$ifile" "$ofile"
x=$?
done
#
# Start Terminal Browser
w3m "$ofile" -T 'text/html'
kill -15 $soffpid
#
There is probably some other way to exit OOo (but I don't know it)
And there is probably some way of starting an independant instance of OOo too, but I don't know how to do that either, so as it is, it requires that OOo is not running...