用Python写ODT文件有简单的方法吗?
我想说的是,使用pod(来自appy框架,我觉得用起来很麻烦)或者OpenOffice UNO桥接,这个似乎很快就要被淘汰了,而且在我运行脚本时还需要启动OOo.org,这一点让我非常不满意。
有没有人能告诉我一个简单又干净的方法来生成ODT文件(我最看重的是表格),而不需要我自己重新编写所有的代码?
补充一下:我正在尝试ODFpy,它似乎能满足我的需求,稍后会有更多信息。
2 个回答
5
如果你想编辑odt文件,我的回答可能帮不上忙。不过,如果你想创建新的odt文件,可以使用QTextDocument、QTextCursor和QTextDocumentWriter,这些都是在PyQt4中提供的工具。下面是一个简单的例子,展示了如何写入一个odt文件:
>>>from pyqt4 import QtGui
# Create a document object
>>>doc = QtGui.QTextDocument()
# Create a cursor pointing to the beginning of the document
>>>cursor = QtGui.QTextCursor(doc)
# Insert some text
>>>cursor.insertText('Hello world')
# Create a writer to save the document
>>>writer = QtGui.QTextDocumentWriter()
>>>writer.supportedDocumentFormats()
[PyQt4.QtCore.QByteArray(b'HTML'), PyQt4.QtCore.QByteArray(b'ODF'), PyQt4.QtCore.QByteArray(b'plaintext')]
>>>odf_format = writer.supportedDocumentFormats()[1]
>>>writer.setFormat(odf_format)
>>>writer.setFileName('hello_world.odt')
>>>writer.write(doc) # Return True if successful
True
QTextCursor还可以插入表格、框架、块和图片。想了解更多信息,可以查看这里: http://qt-project.org/doc/qt-4.8/qtextcursor.html
另外,你还可以使用QPrinter将内容打印成pdf文件。
7
使用odfpy的体验可能因人而异。我个人不太喜欢这个工具,所以我选择了用OpenOffice创建一个模板ODT文件,然后用ziplib和elementtree打开里面的contents.xml文件,并对其进行更新。(在你的情况下,它只会创建相关的表格行和单元格节点),最后再把所有内容保存回去。
其实这个过程很简单,只是要让ElementTree正确处理XML的命名空间有点麻烦。(这个部分的文档写得不太好)不过是可以做到的。抱歉,我没有具体的例子。