用于查看xls文件的命令行工具


27

有用于查看/打开excel(.xls)文件的命令行工具吗?

因此,除非工作表没有自定义名称,否则答案很有效。

当我尝试打开文件时,我得到:

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.

但是,如果我打开该文件并将工作表重命名为“测试”,则可以正常工作。我需要进行哪些调整才能处理默认名称?(Sheet1等)

我目前要打开的文件只有一张,名为Sheet1。

Answers:


22

是的,虽然有点笨拙。让我们从安装两个软件包开始:

sudo apt-get install python-excelerator w3m

从那里开始,我们使用捆绑在一起的脚本python-excelerator将文档转换为HTML文件。然后,我们将其通过命令行浏览器(w3m)进行显示。

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

如果您不想继续键入它,则可以创建一个bash函数或别名。它应该给你这样的输出:

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

非常有力。显然,这将不支持任何形式的宏,编辑或任何交互性。这纯粹是观众。您也可以删除包装东西的引号。在这一点上,我并不特别为他们所困扰。

如果您不需要将其显示为表格,则可以简单地输入以下内容:

py_xls2csv spreadsheet.xls 2>&1 | less

您可以更进一步,以一种更好的方式显示它:

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

这给您以下内容:

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

要将其转储到纯文本文件中:links -dump /tmp/tempspreadsheet.html .....另外:按原样,它以\u0950格式打印Unicode字符...也许有某种方法可以处理输出以产生Unicode字符...如果有人知道“简单”的方式,我想看看...
Peter.O 2011年

@fred我将其切换到w3m现在(因为它看起来更好),并且确实有一些字符集选项(请参阅参考资料w3m --help)。我还缩短了长度,包括避免将其通过管道传输到文件中。
奥利

太棒了!在大多数情况下,这是可行的:请参阅问题主要内容的第2部分进行编辑(格式化内容比评论中的内容容易)
David Oneill

py_xls2csv被硬编码与工作的代码页 cp1251。我已经找到了替代的3个实例cp1251utf-8解决了“不显示Unicode字符的问题” ......我想这取决于什么是在spreadsheed。但使用UTF-8为我工作...(直到发布答案后我才意识到这一点,但它可能会用于其他转换)
Peter.O 2011年

迟来的评论...我只是试图用它来制表一个csv文本文件(首先转换为xls)..尽管生成的文件html保留了多个空格,但是渲染的输出将它们显示为单个空格(典型为html)。 .... <td> cows         moo </td>显示为cows moo...对此可能有一些简单的调整,但是我的html知识不仅仅可以拼写“ html” ..::)
Peter.O,2011年

1

这是维护Unicode字符的方法。
即。它显示,而不是布置Unicode Codepoint值\U0906

该脚本使用OpenOffice.orgPyODConverter.py将一种OOo文档格式转换为另一种OOo格式。转换类型基于文件扩展名:

  • 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
#

可能还有其他退出OOo的方法(但我不知道),
而且也可能有某种方法可以启动OOo的独立实例,但是我也不知道如何执行该操作,因此,它要求OOo没有运行...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.