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
相关产品推荐
相关产品推荐

