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 天的临时许可证。