工作中用到邮件合并固然很快,但是由于锁表问题,每次修改是很难的。用Python实现邮件合并灵活度更高,excel可以随时修改。
步骤:
1、准备好一个excel表单
2、准备你的代码,以下代码可供参考
import pandas as pd
from datetime import datetime
from docx import Document
from io import BytesIO
from docx.shared import Pt, Inches
from docx.oxml.ns import qn
def report(df, folder_path):
row_num = 1
doc = Document()
# 设置默认英文字体和字体大小
doc.styles['Normal'].font.name = '宋体'
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:ascii'), 'Times New Roman')
doc.styles['Normal'].font.size = Pt(12) # 设置字号为12,即小四
# 设置首行缩进2字符,行距固定值20磅
doc.styles['Normal'].paragraph_format.first_line_indent = Inches(0.5)
doc.styles['Normal'].paragraph_format.line_spacing = Pt(20)
for index, row in df.iterrows():
user = row['用户名']
title_str = f"""({row_num})顾客{user}情况""" # 标题
doc.add_paragraph(title_str)
# 内容
zhengwen_str = f"""客户{user},真名:{row['真名']},手机号:{row['手机号']},住宅地址为{row['住宅地址']}。总计充值{format(row['充值次数'],'.0f')}次,共{format(row['充值金额'],'.2f')}元,总计消费{format(row['消费次数'],'.0f')}次,共{format(row['消费金额'],'.2f')}元。"""
print(title_str+zhengwen_str)
doc.add_paragraph(zhengwen_str)
row_num += 1
buffer = BytesIO()
doc.save(buffer)
with open(f'{folder_path}/附件:文本描述.docx', 'wb') as f:
f.write(buffer.getvalue())
if __name__ == '__main__':
current_time = datetime.today().strftime('%Y%m%d')
folder_path = 你的excel所在路径
df = pd.read_excel(fr'{folder_path}/你的excel名称.xlsx')
report(df, folder_path)
3、修改你的代码,运行,即可在excel路径位置看到邮件合并后的word文件了。
4、一些注意点:
①如果想保留数字计算,读取文件时不要dtype=str!记得要format设置小数保留位数。
②一个文本串会自动放到一段,需要换行的话新增一个文本串即可。
③建议将空数字列处理成0,可自定义一个字典,字典中的键是字段名,值是想要填充的数字或字符串,用fillna()填充即可。
over!