邮件合并是 Word 文档中一项强大的功能,能够帮助用户能够高效地创建个性化文档。借助邮件合并,用户可以将模板文档与数据源自动合并,从而生成针对每位收件人定制的、既个性化又专业感十足的文档。这项功能在诸如发送个性化电子邮件、生成发票或制作定制营销材料等任务中尤为实用。本文将演示如何通过 Python 代码使用 Spire.Doc for 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 在 Word 文档中创建邮件合并域
在 Word 文档中进行邮件合并需要利用邮件合并域。Spire.Doc for Python 提供了 Paragraph.AppendField(str: fieldName, FieldType.FieldMergeField) 方法,使得用户能够在文档指定段落中创建邮件合并域。
- 在 Word 文档中创建邮件合并域的具体步骤如下:
- 创建 Document 类的对象,并使用 Document.LoadFromFile() 方法加载一个 Word 文档。
- 使用 Document.Sections.get_Item() 方法获取文档中的某一节。
- 通过 Section.Paragraphs.get_Item() 方法取得要在其中插入邮件合并域的段落。
- 利用 Paragraph.AppendField() 方法向所选段落添加邮件合并域。
- 最后,用 Document.SaveToFile() 方法保存已修改的文档。
- Python
from spire.doc import *
from spire.doc.common import *
# 创建Document类的一个对象
doc = Document()
# 加载一个Word文档
doc.LoadFromFile("示例.docx")
# 获取一个节
section = doc.Sections.get_Item(1)
# 获取用于添加邮件合并域的段落
para1 = section.Paragraphs.get_Item(0)
para2 = section.Paragraphs.get_Item(1)
para3 = section.Paragraphs.get_Item(2)
para4 = section.Paragraphs.get_Item(3)
# 插入邮件合并域并设置域名称
para1.AppendField("姓名", FieldType.FieldMergeField)
para2.AppendField("年龄", FieldType.FieldMergeField)
para3.AppendField("电话号码", FieldType.FieldMergeField)
para4.AppendField("成员类型", FieldType.FieldMergeField)
# 保存文档
doc.SaveToFile("output/邮件合并域.docx")
doc.Close()
用 Python 在 Word 文档中执行邮件合并
在邮件合并结构创建完成后,可以使用 MailMerge.Execute(List: fieldNames, List: dataSource) 方法执行文档内的邮件合并操作。这将实现基于指定数据源快速生成多个包含唯一内容的 Word 文档。
执行邮件合并并生成个性化文档的具体步骤如下:
- 创建 Document 类的对象,并使用 Document.LoadFromFile() 方法加载一个 Word 文档。
- 使用 Document.MailMerge.GetMergeFieldNames() 方法获取邮件合并域地名称列表。
- 遍历数据源执行以下操作:
- 使用 Document.MailMerge.Execute() 方法,结合邮件合并域名称和指定数据条目执行邮件合并。
- 应用 Document.SaveToFile() 方法保存生成的个性化文档。
- Python
from spire.doc import *
from spire.doc.common import *
# 创建一个Document实例
doc = Document()
# 加载一个带有邮件合并域的Word文档
doc.LoadFromFile("output/邮件合并域.docx")
# 获取邮件合并域名称集合
fieldNames = doc.MailMerge.GetMergeFieldNames()
# 指定数据源
dataSource = member_data = [
["Alice Johnson", "35", "+1-555-123-4567", "高级成员"],
["Bob Williams", "42", "+1-555-765-4321", "中级成员"],
["Charlie Brown", "28", "+44-1234-567890", "基础成员"],
]
# 遍历数据源
for i in range(len(dataSource)):
# 执行邮件合并
doc.MailMerge.Execute(fieldNames, dataSource[i])
# 保存文档
doc.SaveToFile(f"output/组织成员/成员-{dataSource[i][0]}.docx")
doc.Close()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。