过去几天,我一直在尝试通过.xml文件操作MS Word文档。主要思想是使用Python将书签控件插入现有文档中。我知道有一个名为Docx的库已经为MS Word提供了一些功能,但它不能满足我的需求(至少现在还没有),所以我正在使用lxml库。这就是书签在单词xml文件中的表示方式:
<w:p>
<w:r>
<w:t xml:space="preserve">This is text with a </w:t>
</w:r>
<w:bookmarkStart w:id="0" w:name="myAnchor"/>
<w:r>
<w:t>bookmark</w:t>
</w:r>
<w:bookmarkEnd w:id="0"/>
</w:p>
经过其他帖子的一些研究后,我有以下代码:
def getXml(docxFilename):
zip = zipfile.ZipFile(open(docxFilename, "rb"))
xmlString = zip.read("word/document.xml")
return xmlString
#Importa a string o
tmp_doc_xml = getXml("/home/davids/Documents/tmp_doc.docx")
root = etree.fromstring(tmp_doc_xml)
a = open("/home/davids/PycharmProjects/Bookmarks/root_xml", "w")
print >>a, (etree.tostring(root, pretty_print=True))
bookmarks_list = root.findall('.//' + qn('w:bookmarkStart'))
for bookmark in bookmarks_list:
name = bookmark.get(qn('w:name'))
print >>a, 'bookmark: '+ str(bookmark) + '\n' + 'content: ' + (etree.tostring(bookmark, pretty_print=True))
bookmarks_list = root.findall('.//' + qn('w:bookmarkEnd'))
for bookmark in bookmarks_list:
name = bookmark.get(qn('w:name'))
print >>a, 'bookmark: '+ str(bookmark) + '\n' + 'content: ' + (etree.tostring(bookmark, pretty_print=True))
我想强调一下,这段代码的某些内容并非由我创建,而是我在互联网上找到的函数汇编。
基本上,它解压缩word文件并将其document.xml文件保存为字符串,然后将该字符串作为树格式导入。所以,我想做的是:
一个。将新书签插入现有的xml代码
湾显示书签中的内容(即,相同ID号的bookmarkStart和bookmarkEnd之间的内容)
谢谢, 大卫