在 word 文档中进行带条件的邮件合并是创建大量个性化文档的高效方法。与只能根据固定模板生成文档的一般邮件合并不同,条件邮件合并可以根据特定的标准或条件来定制内容,使邮件合并能够得到更广泛的应用。利用 python,用户可以轻松创建和执行条件邮件合并,实现更高效的定制文档生成。
本文将演示如何使用 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 在 word 文档中创建条件邮件合并
条件邮件合并是一个包含邮件合并域的 if 域,可以根据数据和判断条件显示特定的合并结果。要在 word 文档中创建条件邮件合并,需要先插入一个 if 域,然后在 if 域的代码中添加一个邮件合并域,最后添加域结束标记以结束 if 域。条件由 if 域中的代码控制。
在 word 文档中创建条件邮件合并的详细步骤如下:
- 创建 document 类的实例,生成 word 文档。
- 在文档中添加一个节并配置页面设置。
- 创建段落样式、添加段落及文本并设置其格式。
- 创建一个 iffield 类的对象,通过 iffield.code 属性设置其起始代码,并使用 paragraph.items.add() 方法将其插入段落。
- 使用 paragraph.appendfield() 方法将邮件合并域添加到段落中。
- 使用 paragraph.appendtext() 方法将其余代码添加到段落中。
- 使用 paragraph.appendfieldmark() 方法为 if 域添加域结束标记。
- 通过 iffield.end 属性将添加的结束标记设置为 if 域的结束标记。
- 使用 document.savetofile() 方法保存文档。
- python
from spire.doc import *
# 创建 document 实例
doc = document()
# 向文档添加一个节
section = doc.addsection()
# 设置页面大小和边距
section.pagesetup.pagesize = pagesize.a4()
section.pagesetup.margins.all = 50
# 创建段落样式
style = paragraphstyle(doc)
style.name = "style1"
style.characterformat.fontname = "harmonyos sans sc"
style.characterformat.fontsize = 14
doc.styles.add(style)
# 添加段落并设置样式
paragraph = section.addparagraph()
paragraph.appendtext("尊敬的")
paragraph.appendfield("name", fieldtype.fieldmergefield)
paragraph.appendtext(":")
paragraph.applystyle(style.name)
paragraph = section.addparagraph()
paragraph.appendtext("\r\n感谢您成为我们的宝贵客户。我们非常感谢您的业务和支持。")
paragraph.applystyle(style.name)
# 在段落中添加 if 域
paragraph = section.addparagraph()
iffield = iffield(doc)
iffield.type = fieldtype.fieldif
iffield.code = "if "
paragraph.items.add(iffield)
# 在 if 域的代码中添加邮件合并域
paragraph.appendfield("customertype", fieldtype.fieldmergefield)
paragraph.appendtext(" = ")
paragraph.appendtext("\"vip\"")
paragraph.appendtext(" \"作为 vip 客户,我们为您准备了一个特别优惠!享受下一次购买的 20% 折扣。\"")
paragraph.appendtext("\"我们将不定期提供额外的优惠,请关注凯发线上登陆下载网址的公告或邮件。\"")
# 在末尾添加域结束标记以结束 if 域
endif = paragraph.appendfieldmark(fieldmarktype.fieldend)
iffield.end = endif
paragraph.applystyle(style.name)
# 添加段落并设置样式
paragraph = section.addparagraph()
paragraph.appendtext("您的总消费金额(¥):")
paragraph.appendfield("totalspent", fieldtype.fieldmergefield)
paragraph.applystyle(style.name)
paragraph = section.addparagraph()
paragraph.appendtext("\r\n此致,\r\n科技有限公司")
paragraph.applystyle(style.name)
# 保存文档
doc.savetofile("output/条件邮件合并.docx", fileformat.docx)
doc.close()
用 python 在 word 文档中执行条件邮件合并
spire.doc for python 提供的 document.mailmerge.execute(fieldnames: list[str], fieldvalues: list[str]) 方法可用于在 word 文档中进行邮件合并操作。合并完成后,通过将 document.isupdatefields 属性设置为 true 来更新条件邮件合并的结果。具体步骤如下:
- 读取用于合并的表中的数据为二维列表。
- 遍历数据行,跳过标题:
- 创建 document 类的实例并加载要合并的 word 文档。
- 使用 document.mailmerge.getmergefieldnames() 方法获取文档中的邮件合并域的名称为列表。
- 使用 document.mailmerge.execute() 方法使用数据执行邮件合并。
- 将 document.isupdatefields 属性设置为 true,更新 if 域。
- 使用 document.savetofile() 方法保存文档。
- python
from spire.doc import *
import csv
# 从 csv 文件中读取数据
data = []
with open("示例.csv", "r", encoding="utf-8") as csvfile:
read = csv.reader(csvfile)
for row in read:
data.append(row)
# 遍历数据行,跳过标题行
for i in range(1, len(data)):
# 创建 document 实例并加载 word 文档
doc = document("output/条件邮件合并.docx")
# 从文档中获取域名
fieldnames = doc.mailmerge.getmergefieldnames()
# 执行邮件合并
doc.mailmerge.execute(fieldnames, data[i])
# 更新 if 域
doc.isupdatefields = true
# 保存文档
doc.savetofile(f"output/顾客/{data[i][0]}.docx", fileformat.docx2019)
doc.close()
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。