用Python实现邮件合并功能

工作中用到邮件合并固然很快,但是由于锁表问题,每次修改是很难的。用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!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值