解析和生成Microsoft Office 2007文件 (.docx, .xlsx, .pptx)
我有一个网页项目,需要从用户提供的文档中导入文本和图片,其中一种可能的格式是微软的Office 2007。同时,我还需要生成这种格式的文档。
我的服务器运行的是CentOS 5.2,已经安装了PHP、Perl和Python。如果需要的话,我可以执行本地的二进制文件和脚本。我们现在使用的是Apache 2.2,但上线后会切换到Nginx。
我有哪些选择呢?有没有人有过相关的经验?
4 个回答
3
我在一个项目中成功地使用了OpenXML格式SDK来通过代码修改Excel表格。使用这个工具需要.NET框架,不过我不太确定它在Mono环境下运行得怎么样。
6
python的docx模块可以用纯Python生成格式化的Microsoft Office docx文件。这个模块自带的功能可以处理标题、段落、表格和项目符号,但通过makeelement()模块,你还可以扩展它来添加其他元素,比如图片。
from docx import *
document = newdocument()
# This location is where most document content lives
docbody = document.xpath('/w:document/w:body',namespaces=wordnamespaces)[0]
# Append two headings
docbody.append(heading('Heading',1) )
docbody.append(heading('Subheading',2))
docbody.append(paragraph('Some text')
18
Office 2007的文件格式是开放的,并且有详细的说明。简单来说,所有以“x”结尾的新文件格式都是经过压缩的XML文档。例如:
要打开一个Word 2007的XML文件,首先创建一个临时文件夹,用来存放这个文件及其组成部分。
将一个包含文本、图片和其他元素的Word 2007文档保存为.docx文件。
在文件名的后面加上.zip的扩展名。
双击这个文件,它会在ZIP应用程序中打开。你可以看到这个文件的组成部分。
将这些部分提取到你之前创建的文件夹中。
其他文件格式大致也差不多。我目前不知道有什么开源库可以用来处理这些文件,不过根据你的具体需求,读取和写入简单文档应该不会太难。相比于旧格式,这肯定要简单很多。
如果你需要读取旧格式的文件,OpenOffice有一个API,可以比较成功地读取和写入Office 2003及更早的文档。