使用python-docx编辑浮动文本框还是编辑document.xml?

时间:2019-07-14 13:24:36

标签: xml python-2.7 floating python-docx

我正在编辑一个docx模板,其中包含一堆浮动图像和文本框。我正在尝试通过python-docx编辑这些文本框或直接编辑document.xml。但是,似乎python-docx的当前迭代仅允许编辑内联“图片”(在本例中为文本框)。最终目标是使用python-docx编辑文本框,或者通过访问和编辑document.xml对其进行编辑(理想情况下无需解压缩然后再压缩回去)

到目前为止,我已经尝试使用python-docx进行编辑,但是从我的研究来看,无法使用python-docx来编辑文本框。

我也尝试过单独编辑document.xml,但是我成功完成了该操作,但是当我尝试将目录压缩后将扩展名更改回docx时,我无法打开它。

import lxml.etree as ET

xmlfile = r"path\document.xml"

with open(xmlfile) as f:
  tree = ET.parse(f)
  root = tree.getroot()


  for elem in root.getiterator():
    try:
      elem.text = elem.text.replace('current id in document', 'new ID in document')
    except AttributeError:
      pass

tree.write(r"path\documentedit.xml", xml_declaration=True, method='xml')

这是我第一次不使用python解压缩docx。然后使用python编辑XML。然后我将其压缩而不使用python只是为了查看是否可以使它正常工作,但无法打开文档。

1 个答案:

答案 0 :(得分:0)

打开Open Packaging Convention(OPC)程序包并以Word要求打开的形式返回时涉及很多细节。

您可以使用python-docx直接访问XML,同时仍将适当保存(或“重新打包”)的详细信息留给python-docx

如果您使用的是lxml,则可以使用lxml.etree._Element将文档部分的XML作为document._element对象。调用document.save()时,对XML树所做的任何更改都将保存。

另一种选择是直接使用document.part.blob访问XML文本。可以将更改的版本(作为str)分配给document.part._blob(请注意下划线),并在您调用document.save()时将其保存。

这避免了您不得不处理所有复杂的包装。