fra*_*lau 7 python excel openxml pandoc python-docx
我正在使用pandoc(通过pypandoc)将docx文件转换为非Windows机器上的markdown.这些文件可以包含图像,也可以包含其他嵌入对象.
pandoc实际上能够将嵌入式Powerpoint演示文稿(转换为EMF文件)转换,但它无法处理Excel对象(它会忽略它们).目标是使用python将这些嵌入的Excel对象转换为图像,以便它们可以作为HTML输出的一部分显示.
只要可以使用python API包装,就可以使用以其他语言编写的组件(例如bash脚本).
我意识到这可能是非Windows平台上的高级订单(例如,没有Microsoft库win32com
).有没有人对此有任何成功,或有任何有根据的猜测如何进行?
要显示的单元格区域是什么?
所有嵌入对象的核心问题是确定应该显示哪些部分,因为这是核心功能.
必须有一种方法来确定要显示哪些单元格,因为在读取docx文件的内容时,Word可以使用该信息.
这是问题的症结所在.如果实际算法不能考虑到这一点,那么答案仍将被接受,只要它提供了一种提取信息的方法.
根据建议探索文件本身的结构,这里是我观察到的:如果你创建一个Mydoc.docx
带有嵌入式Excel文件的简单docx文档(),你可以通过制作docx文件的副本来检查它的内容(重命名它)使用.zip扩展名)并解压缩.
Mydoc/word/document.xml
Mydoc/word/embeddings/Excel_Sheet_1.xlsx
(或类似的东西)中.如果这是要走的路,那么问题分为两部分:
Excel_Sheet_1.xlsx
为图像(如何知道图像和单元格区域是图像的一部分?).document.xml
以使其显示"指向图像"而不是指向嵌入文件.OOXML相当复杂,特别是当你尝试做一些像我想做的那样"基本"的事情时......有没有人从Unix平台走到那里并带回一些明智的东西?
正如您在OP中提到的,我会采用“反汇编-汇编”方式mydoc.docx
,即:
从 中提取 Excel 工作表mydoc.docx
。我假设它是一个嵌入式工作表,它肯定可以轻松适应工作表是链接的外部xlsx
. 就我而言,工作表位于结构word\embeddings\Microsoft_Excel_Worksheet1.xlsx
内部docx
。正如您所说,一种方法是复制到结构mydoc.docx
中,然后从结构中mydoc.zip
提取。Microsoft_Excel_Worksheet1.xlsx
mydoc.zip
转换Microsoft_Excel_Worksheet1.xlsx
成图像。由于缺乏 win API,这在 Linux 下似乎不是一个简单的任务。例如,excel2img需要pywin32。解决方法是使用unoconv
将其转换xlsx
为合适的格式。这里的选项有很多。注意:
您可能需要从 python 中将其作为外部命令运行。这不是问题,但您的 python 脚本应该确定主机操作系统,然后决定是否使用unoconv
(对于 Linux)或更“标准”的解决方案(对于 Windows,超出了 OP 的范围)。请注意,它unoconv
是用 python 编写的,因此也许您可以以某种方式将其集成到您的脚本中。
unoconv
导出到时报告了错误png
,例如。您可能需要分两步导出到目标格式,pdf
然后转换为png
/ jpg
,例如使用convert
. 这可能因版本而异。在我的版本中,电子表格可以导出的唯一图形格式是pdf,因此两步转换成为强制性的。请注意,您可能必须使用-crop
选项convert
,因为 pdf 导出会生成整页。
您必须unoconv
在您的系统中安装。
您可以选择要导出的页面范围,据
unoconv -f pdf -d spreadsheet -e PageRange=1-1 Microsoft_Excel_Worksheet1.xlsx
我尝试,导出整个非空单元格范围,并且不可能使用 导出部分内容unoconv
。一个可能的解决方法是折叠openpyxl
您不想显示的单元格范围,然后导出。
这是问题的本质(“目标是使用 python 将那些嵌入的 Excel 对象转换为图像。”)
Microsoft_Excel_Worksheet1.xlsx
为创建的图像。注意:这是可以在 Excel 工作表上执行各种操作的 pyhton 模块列表。
pyExcelerator(显然不再维护)
xlwt(的一个分支pyExcelerator
)
归档时间: |
|
查看次数: |
827 次 |
最近记录: |