使用 python-docx 或编辑 document.xml 编辑浮动文本框?
Editing floating textbox using python-docx or editing document.xml?
我正在编辑一个包含大量浮动图像和文本框的 docx 模板。我正在尝试通过 python-docx 或直接编辑 document.xml 来编辑这些文本框。但是,python-docx 的当前迭代似乎只允许编辑内联 "pictures"(在本例中为文本框)。最终目标是要么使用 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 的情况下将其压缩,只是为了看看我是否可以让它工作,但我无法打开文档。
在需要 Word 打开的表单中打开和返回一个开放式打包约定 (OPC) 包涉及很多细节。
您可以使用 python-docx
直接访问 XML,同时仍将正确保存(或“re-packaging”)的详细信息留给 python-docx
。
如果您使用 lxml
,您可以使用 document._element
将文档部分的 XML 作为 lxml.etree._Element
对象获取。当您调用 document.save()
.
时,您对该 XML 树所做的任何更改都将被保存
另一种方法是直接使用 document.part.blob
访问 XML 文本。可以将更改后的版本(作为 Python 2 str/ Python 3 字节)分配给 document.part._blob
(注意前导下划线),并在调用 document.save()
时保存。
这样您就不必处理所有复杂的包装问题。
我正在编辑一个包含大量浮动图像和文本框的 docx 模板。我正在尝试通过 python-docx 或直接编辑 document.xml 来编辑这些文本框。但是,python-docx 的当前迭代似乎只允许编辑内联 "pictures"(在本例中为文本框)。最终目标是要么使用 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 的情况下将其压缩,只是为了看看我是否可以让它工作,但我无法打开文档。
在需要 Word 打开的表单中打开和返回一个开放式打包约定 (OPC) 包涉及很多细节。
您可以使用 python-docx
直接访问 XML,同时仍将正确保存(或“re-packaging”)的详细信息留给 python-docx
。
如果您使用 lxml
,您可以使用 document._element
将文档部分的 XML 作为 lxml.etree._Element
对象获取。当您调用 document.save()
.
另一种方法是直接使用 document.part.blob
访问 XML 文本。可以将更改后的版本(作为 Python 2 str/ Python 3 字节)分配给 document.part._blob
(注意前导下划线),并在调用 document.save()
时保存。
这样您就不必处理所有复杂的包装问题。