使用python docx或Editing document.xml编辑浮动文本框?
我正在编辑一个docx模板,其中包含一堆浮动图像和文本框。我试图通过PythonDocx编辑这些文本框,或者直接编辑document.xml。然而,PythonDocx的当前迭代似乎只允许编辑内联“图片”(在本例中为文本框)。最终目标是使用PythonDocx编辑文本框,或者通过访问和编辑document.xml来编辑文本框(理想情况下无需解压缩然后压缩备份) 到目前为止,我已经尝试使用PythonDocx来编辑这些文本,但是根据我的研究,文本框不能使用PythonDocx进行编辑 我还尝试过单独编辑document.xml,我成功地做到了这一点,但是当我试图压缩目录并将扩展名更改回docx时,我无法打开它使用python docx或Editing document.xml编辑浮动文本框?,xml,python-2.7,floating,python-docx,Xml,Python 2.7,Floating,Python Docx,我正在编辑一个docx模板,其中包含一堆浮动图像和文本框。我试图通过PythonDocx编辑这些文本框,或者直接编辑document.xml。然而,PythonDocx的当前迭代似乎只允许编辑内联“图片”(在本例中为文本框)。最终目标是使用PythonDocx编辑文本框,或者通过访问和编辑document.xml来编辑文本框(理想情况下无需解压缩然后压缩备份) 到目前为止,我已经尝试使用PythonDocx来编辑这些文本,但是根据我的研究,文本框不能使用PythonDocx进行编辑 我还尝试过单
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将其压缩,只是想看看是否可以让它工作,但我无法打开文档。打开一个开放式打包约定(OPC)包并以Word需要的形式将其重新打开涉及到很多细节
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')
您可以使用pythondocx
直接访问XML,同时仍将正确保存(或“重新打包”)的详细信息保留到pythondocx
如果您使用的是lxml
,则可以使用document.\u元素
以lxml.etree.\u元素
对象的形式获取文档部分的XML。调用document.save()
时,将保存对XML树所做的任何更改
另一种方法是使用document.part.blob
直接访问XML文本。可以将更改的版本(作为Python 2 str/Python 3字节)分配给document.part.\u blob
(注意前面的下划线)并在调用document.save()时保存
这避免了您必须处理所有复杂的打包问题。谢谢,我在代码前面意识到复制到我工作区的初始模板已经解压(解压缩),因此我在代码前面使用lxml直接编辑doument.xml,只需要打包一次。上述建议对任何希望避免包装/重新包装的人都有帮助。一些代码示例会很有用。我看过你在许多其他主题上发表的与python docxdocument相关的文章。save()
没有保存更改的内容。但是,document.part.\u blob
已更改。原因可能是什么?