word 文档利用内容控件技术,为文档内容赋予了动态生命力,让用户在编辑与管理文档时享有更高的灵活性与便捷性。这些控件作为交互式元素,赋能用户在保持文档框架完整无损的前提下,自由地增添、移除或是调整指定内容区块,从而实现文档内容的敏捷迭代与个性化定制。本文将介绍如何使用 spire.doc for python 在 python 项目中修改 word 文档中的内容控件。
安装 spire.doc for python
本教程需要用到 spire.doc for python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 windows 中。
pip install spire.doc
如果您不确定如何安装,请参考:如何在 windows 中安装 spire.doc for python
python 修改正文内容控件
在 spire.doc 中,正文内容控件的对象类型是 structuredocumenttag。需要进入 section.body.childobjects 对象集合,遍历查找到类型为 structuredocumenttag 的对象,然后对其进行修改。以下是详细的步骤:
- 创建一个 document 对象。
- 使用 document.loadfromfile() 方法加载一个文档。
- 使用 section.body 获取文档一个节的正文部分。
- 遍历正文部分的子对象集合 body.childobjects,获取到类型为 structuredocumenttag 的子对象。
- 进入 structuredocumenttag.childobjects 子对象集合,根据子对象的类型执行相应的修改操作。
- 使用 document.savetofile() 方法保存到文档。
- python
from spire.doc import *
from spire.doc.common import *
# 创建一个新的文档对象
doc = document()
# 从文件加载文档内容
doc.loadfromfile("示例1.docx")
# 获取文档正文部分
body = doc.sections.get_item(0).body
# 创建段落列表和表格列表
paragraphs = []
tables = []
for i in range(body.childobjects.count):
obj = body.childobjects.get_item(i)
# 如果是structuredocumenttag对象
if obj.documentobjecttype == documentobjecttype.structuredocumenttag:
sdt = (structuredocumenttag)(obj)
# 如果标签为"c1"或者别名为"c1"
if sdt.sdtproperties.tag == "c1" or sdt.sdtproperties.alias == "c1":
for j in range(sdt.childobjects.count):
child_obj = sdt.childobjects.get_item(j)
# 如果是段落对象
if child_obj.documentobjecttype == documentobjecttype.paragraph:
paragraphs.append(child_obj)
# 如果是表格对象
elif child_obj.documentobjecttype == documentobjecttype.table:
tables.append(child_obj)
# 修改第一个段落的文本内容
if paragraphs:
(paragraph)(paragraphs[0]).text = "成都冰蓝科技有限公司的 spire 系列文档处理组件均由中国本土团队研发,不依赖第三方软件。"
if tables:
# 重置第一个表格的单元格为5行4列
(table)(tables[0]).resetcells(5, 4)
# 将修改后的文档保存到文件
doc.savetofile("修改word文档正文中的内容控件.docx", fileformat.docx2016)
# 释放文档资源
doc.close()
doc.dispose()
python 修改段落中的内容控件
在 spire.doc 中,段落中的内容控件对象类型是 structuredocumenttaginline。通过遍历 paragraph.childobjects 的对象集合,查找到类型为 structuredocumenttaginline 的对象,然后对其进行修改。以下是详细的步骤:
- 创建一个 document 对象。
- 使用 document.loadfromfile() 方法加载一个文档。
- 使用 section.body 获取文档一个节的正文部分。
- 使用 body.paragraphs.get_item(0) 获取正文部分的第一个段落。
- 遍历段落的子对象集合 paragraph.childobjects,获取到类型为 structuredocumenttaginline 的子对象。
- 进入 structuredocumenttaginline.childobjects 子对象集合,根据子对象的类型执行相应的修改操作。
- 使用 document.savetofile() 方法保存到文档。
- python
from spire.doc import *
from spire.doc.common import *
# 创建一个新的document对象
doc = document()
# 从文件加载文档内容
doc.loadfromfile("示例2.docx")
# 获取文档的主体部分
body = doc.sections.get_item(0).body
# 获取主体部分的第一个段落
paragraph = body.paragraphs.get_item(0)
# 遍历段落中的子对象
for i in range(paragraph.childobjects.count):
obj = paragraph.childobjects.get_item(i)
# 检查子对象是否为structuredocumenttaginline类型
if obj.documentobjecttype == documentobjecttype.structuredocumenttaginline:
# 将子对象转换为structuredocumenttaginline类型
structure_document_tag_inline = (structuredocumenttaginline)(obj)
# 检查文档标记的tag或alias属性是否为"text1"
if structure_document_tag_inline.sdtproperties.tag == "text1":
# 遍历structuredocumenttaginline对象里的子对象
for j in range(structure_document_tag_inline.childobjects.count):
obj2 = structure_document_tag_inline.childobjects.get_item(j)
# 检查子对象是否为textrange对象
if obj2.documentobjecttype == documentobjecttype.textrange:
# 将子对象转换为textrange类型
range = (textrange)(obj2)
# 设置文本内容为指定内容
range.text = "word97-2003、word2007、word2010、word2013、word2016以及word2019"
# 检查文档标记的tag或alias属性是否为"logo1"
if structure_document_tag_inline.sdtproperties.tag == "logo1":
# 遍历structuredocumenttaginline对象里的子对象
for j in range(structure_document_tag_inline.childobjects.count):
obj2 = structure_document_tag_inline.childobjects.get_item(j)
# 检查子对象是否为图片
if obj2.documentobjecttype == documentobjecttype.picture:
# 将子对象转换为docpicture类型
doc_picture = (docpicture)(obj2)
# 加载指定图片
doc_picture.loadimage("doc-python.png")
# 设置图片宽度和高度
doc_picture.width = 100
doc_picture.height = 100
# 将修改后的文档保存为新的文件
doc.savetofile("修改word文档的段落中的内容控件.docx", fileformat.docx2016)
# 释放document对象的资源
doc.close()
doc.dispose()
python 修改表格行内容控件
在 spire.doc 中,表格行内容控件对象类型是 structuredocumenttagrow。需要遍历 table.childobjects 的子对象集合,查找到类型为 structuredocumenttagrow 的对象,然后对其进行修改。以下是详细的步骤:
- 创建一个 document 对象。
- 使用 document.loadfromfile() 方法加载一个文档。
- 使用 section.body 获取文档一个节的正文部分。
- 使用 body.tables.get_item(0) 获取正文部分的第一个表格。
- 遍历表格的子对象集合 table.childobjects,获取到类型为 structuredocumenttagrow 的子对象。
- 进入 structuredocumenttagrow.cells 表格行内容控件的单元格集合,然后对单元格内容执行相应的修改操作。
- 使用 document.savetofile() 方法保存到文档。
- python
from spire.doc import *
from spire.doc.common import *
# 创建一个新的文档对象
doc = document()
# 从文件加载文档
doc.loadfromfile("示例3.docx")
# 获取文档正文部分
body = doc.sections.get_item(0).body
# 获取第一个表格
table = body.tables.get_item(0)
# 遍历表格中的子对象
for i in range(table.childobjects.count):
obj = table.childobjects.get_item(i)
# 判断子对象是否为structuredocumenttagrow类型
if obj.documentobjecttype == documentobjecttype.structuredocumenttagrow:
# 将子对象转换为structuredocumenttagrow对象
structuredocumenttagrow = (structuredocumenttagrow)(obj)
# 检查structuredocumenttagrow的tag或alias属性是否为"row1"
if structuredocumenttagrow.sdtproperties.tag == "row1":
# 清空单元格中的段落
structuredocumenttagrow.cells.get_item(0).paragraphs.clear()
# 在单元格中添加一个段落,并设置文本
textrange = structuredocumenttagrow.cells.get_item(0).addparagraph().appendtext("艺术")
textrange.characterformat.textcolor = color.get_blue()
# 将修改后的文档保存到文件
doc.savetofile("修改表格行内容控件.docx", fileformat.docx2016)
# 释放文档资源
doc.close()
doc.dispose()
python 修改表格单元格内容控件
在 spire.doc 中,表格单元格内容控件对象类型是 structuredocumenttagcell。需要遍历 tablerow.childobjects 的子对象集合,查找到类型为 structuredocumenttagcell 的对象,然后对其进行操作。以下是详细的步骤:
- 创建一个 document 对象。
- 使用 document.loadfromfile() 方法加载一个文档。
- 使用 section.body 获取文档一个节的正文部分。
- 使用 body.tables.get_item(0) 获取正文部分的第一个表格。
- 遍历表格行集合 table.rows,进入每一个 tablerow 对象。
- 遍历表格行的子对象集合 tablerow.childobjects,获取到类型为 structuredocumenttagcell 的子对象。
- 进入 structuredocumenttagcell.paragraphs 表格单元格内容控件的段落集合,然后对内容执行相应的修改操作。
- 使用 document.savetofile() 方法保存到文档。
- python
from spire.doc import *
from spire.doc.common import *
# 创建一个新的文档对象
doc = document()
# 从文件加载文档
doc.loadfromfile("示例4.docx")
# 获取文档的正文部分
body = doc.sections.get_item(0).body
# 获取文档中的第一个表格
table = body.tables.get_item(0)
# 遍历表格的行
for i in range(table.rows.count):
row = table.rows.get_item(i)
# 遍历每行中的子对象
for j in range(row.childobjects.count):
obj = row.childobjects.get_item(j)
# 检查该子对象是否为structuredocumenttagcell
if obj.documentobjecttype == documentobjecttype.structuredocumenttagcell:
# 将子对象转换为structuredocumenttagcell类型
structuredocumenttagcell = (structuredocumenttagcell)(obj)
# 检查structuredocumenttagcell的tag或alias属性是否为"cell1"
if structuredocumenttagcell.sdtproperties.tag == "cell1":
# 清空单元格中的段落
structuredocumenttagcell.paragraphs.clear()
# 添加一个新段落,并在其中添加文本
textrange = structuredocumenttagcell.addparagraph().appendtext("92")
textrange.characterformat.textcolor = color.get_blue()
# 将修改后的文档保存为新的文件
doc.savetofile("修改表格单元格内容控件.docx", fileformat.docx2016)
# 释放文档对象
doc.close()
doc.dispose()
python 修改表格单元格中的内容控件
这个案例展示的是修改在表格单元格的段落中的内容控件。需要先进入单元格中的段落集合 tablecell.pagragraphs,然后遍历每一个段落对象的子对象集合 paragraph.childobjects,查找到类型为 structuredocumenttaginline 的对象,然后对其进行修改。以下是详细的步骤:
- 创建一个 document 对象。
- 使用 document.loadfromfile() 方法加载一个文档。
- 使用 section.body 获取文档一个节的正文部分。
- 使用 body.table.get_item(0) 获取正文部分的第一个表格。
- 遍历表格行集合 table.rows,进入每一个 tablerow 对象。
- 遍历单元格集合 tablerow.cells,进入每一个 tablecell 对象。
- 遍历单元格里的段落集合 tablecell.paragraphs,进入每一个 paragraph 对象。
- 遍历段落的子对象集合 paragraph.childobjects,查找到类型为 structuredocumenttaginline 的对象。
- 进入 structuredocumenttaginline.childobjects 子对象集合,根据子对象的类型执行相应的修改操作。
- 使用 document.savetofile() 方法保存到文档。
- python
from spire.doc import *
from spire.doc.common import *
# 创建一个新的document对象
doc = document()
# 从文件加载文档内容
doc.loadfromfile("示例5.docx")
# 获取文档的主体部分
body = doc.sections.get_item(0).body
# 获取第一个表格
table = body.tables.get_item(0)
# 遍历表格的行
for r in range(table.rows.count):
row = table.rows.get_item(r)
for c in range(row.cells.count):
cell = row.cells.get_item(c)
for p in range(cell.paragraphs.count):
paragraph = cell.paragraphs.get_item(p)
for i in range(paragraph.childobjects.count):
obj = paragraph.childobjects.get_item(i)
# 检查子对象是否为structuredocumenttaginline类型
if obj.documentobjecttype == documentobjecttype.structuredocumenttaginline:
# 将子对象转换为structuredocumenttaginline类型
structure_document_tag_inline = (structuredocumenttaginline)(obj)
# 检查文档标记的tag或alias属性是否为"test1"
if structure_document_tag_inline.sdtproperties.tag == "test1":
# 遍历structuredocumenttaginline对象里的子对象
for j in range(structure_document_tag_inline.childobjects.count):
obj2 = structure_document_tag_inline.childobjects.get_item(j)
# 检查子对象是否为textrange对象
if obj2.documentobjecttype == documentobjecttype.textrange:
# 将子对象转换为textrange类型
textrange = (textrange)(obj2)
# 设置文本内容
textrange.text = "89"
# 设置文本颜色
textrange.characterformat.textcolor = color.get_blue()
# 将修改后的文档保存为新文件
doc.savetofile("修改表格单元格的段落中的文本内容控件.docx", fileformat.docx2016)
#释放document对象资源
doc.close()
doc.dispose()
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。