如何使用python在Word 2013文档中创建书签?

时间:2015-05-05 12:48:50

标签: python ms-word lxml wordprocessingml

过去几天,我一直在尝试通过.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之间的内容)

谢谢, 大卫

0 个答案:

没有答案