我正在编辑一个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只是为了查看是否可以使它正常工作,但无法打开文档。
答案 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()
时将其保存。
这避免了您不得不处理所有复杂的包装。