You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现CSV到Word连续邮件合并(多页单文档)问题求助

解决邮件合并生成多页多记录Word文档的问题

问题根源

你的代码每次循环都重新创建MailMerge实例,导致之前的合并内容被完全覆盖,最终仅保留最后一条记录。同时缺少多记录批量合并的逻辑,无法实现类似Word的"Next Record"连续生成效果。


解决方案

针对你"4条数据分两页展示、每页两栏各一条记录"的需求,分两步修改:

1. 调整Word模板

修改Test.docx,设置两栏布局,分别添加对应左右记录的合并域:

  • 左栏:«Left_BusinessName»、«Left_Name»
  • 右栏:«Right_BusinessName»、«Right_Name»

2. 修正Python代码

初始化一次MailMerge对象,将数据按每页2条分组后批量合并:

from __future__ import print_function
import pandas as pd
from mailmerge import MailMerge

template = "Test.docx"
df = pd.read_csv('List.csv')

# 仅初始化一次MailMerge,避免覆盖之前的内容
doc = MailMerge(template)

# 按每页2条拆分数据
page_data = []
for i in range(0, len(df), 2):
    left_row = df.iloc[i]
    # 处理最后一页可能只有1条数据的情况
    right_row = df.iloc[i+1] if (i+1) < len(df) else pd.Series({"BusinessName": "", "Name": ""})
    
    page_data.append({
        "Left_BusinessName": left_row.BusinessName,
        "Left_Name": left_row.Name,
        "Right_BusinessName": right_row.BusinessName,
        "Right_Name": right_row.Name
    })

# 批量合并每组数据,每组对应一页
doc.merge_pages(page_data)
doc.write('example1.docx')

简化版(每页1条记录)

如果只需每页展示1条记录(4条数据生成4页),可以用更简洁的写法:

from __future__ import print_function
import pandas as pd
from mailmerge import MailMerge

template = "Test.docx"
df = pd.read_csv('List.csv')

doc = MailMerge(template)
# 将每条数据转为字典,merge_pages自动生成多页
records = [{"BusinessName": row.BusinessName, "Name": row.Name} for _, row in df.iterrows()]
doc.merge_pages(records)
doc.write('example1.docx')

内容的提问来源于stack exchange,提问作者bkcollection

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:10:55