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



 
					



