我试图根据我的一系列变量生成一堆MS Word Mergefeild。环顾四周后,看起来最好的解决方案是打开一个包含一个Mergefeild作为XML文件的word文档,找到该字段并复制它,然后替换新变量名中的文本。现在我被困在复制粘贴部分,并将稍微处理替换部分。请注意我不想实际运行邮件合并,只需生成一堆合并域。
这是我的代码:
def check_element_is(element, type_char):
word_schema = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'
return element.tag == '{%s}%s' % (word_schema,type_char)
zfile = zipfile.ZipFile("C:TEST.docx")
# return the xml
filexml = zfile.read("word/document.xml")
my_etree = etree.fromstring(filexml)
etree.tostring(my_etree,pretty_print=True)
for node in my_etree.iter(tag=etree.Element):
print node
if check_element_is(node, 'fldSimple'): ## Finds the Mergefeild node.
dupe = copy.deepcopy(node)
my_etree.append(dupe) ## I'd like this directly below the other mergefield node
zout = zipfile.ZipFile("C:Test_OUT.docx", 'w')
zout.writestr('word/document.xml', 'cool')
zout.close()
我的思绪有点油腻,所以如果我没有意义,我会道歉。
主要灵感来自:docx_mailmerge.py
脚本
以及关于堆栈溢出的其他复制/粘贴xml问题。我也玩过python-docx,但它似乎不适合这个账单。