You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python用win32com发送的Outlook邮件中插入Pandas变量

在Outlook HTML邮件正文中插入Pandas/Numpy数据值的实现方法

嘿,这事儿其实超简单!咱们可以利用Python的字符串格式化能力,轻松把Pandas里的数据、计算结果或者已定义的变量嵌入到Outlook的HTML邮件正文中。下面给你分享几种实用的实现方式:

方法1:使用f-string格式化(Python 3.6+首选)

f-string是目前最直观、最便捷的字符串格式化方式,直接把变量或者Pandas的计算表达式用{}包裹,就能嵌入到HTML内容里。给你看个完整的示例代码:

import win32com.client as win32
import pandas as pd
import numpy as np

# 先构造一个示例DataFrame(替换成你的真实数据)
df = pd.DataFrame({'Sales': [100, 200, 300, 400], 'Profit': [10, 25, 30, 45]})
variable1 = df['Sales'].max()  # 提前赋值的变量

# 初始化Outlook邮件
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'mail@domain.com'
mail.Subject = '销售数据统计报告'

# 用f-string把数据嵌入HTML正文
mail.HTMLBody = f"""
<html>
    <body>
        <h2>📊 销售数据统计</h2>
        <p>本次统计共包含 <strong>{df.shape[0]}</strong> 条记录</p>
        <p>最高销售额为 <strong>{variable1}</strong> 元</p>
        <p>最高利润为 <strong>{df['Profit'].max()}</strong> 元</p>
    </body>
</html>
"""

# 如需添加附件,取消下面两行注释
# attachment = "C:/path/to/your/report.xlsx"
# mail.Attachments.Add(attachment)

mail.Send()

这种方式的好处是代码可读性极强,一眼就能看出哪些位置会插入动态数据,而且Python会自动把数字、数值类型的计算结果转换成字符串,不用额外处理。

方法2:使用str.format()方法(兼容低版本Python)

如果你的Python版本低于3.6,或者更习惯这种格式化风格,可以用str.format()来实现:

# 替换邮件HTML正文部分即可
mail.HTMLBody = """
<html>
    <body>
        <h2>📊 销售数据统计</h2>
        <p>本次统计共包含 <strong>{row_count}</strong> 条记录</p>
        <p>最高销售额为 <strong>{max_sales}</strong> 元</p>
        <p>最高利润为 <strong>{max_profit}</strong> 元</p>
    </body>
</html>
""".format(
    row_count=df.shape[0],
    max_sales=variable1,
    max_profit=df['Profit'].max()
)

这里需要把要插入的动态数据作为参数传给format()方法,对应HTML里的占位符名称,逻辑也很清晰。

方法3:字符串拼接(不推荐,但应急可用)

虽然这种方式代码会显得零散,维护起来麻烦,但如果应急的话也能使用:

# 拆分HTML片段,逐个拼接动态内容
html_head = "<html><body><h2>📊 销售数据统计</h2>"
row_count_section = f"<p>本次统计共包含 <strong>{df.shape[0]}</strong> 条记录</p>"
max_sales_section = f"<p>最高销售额为 <strong>{variable1}</strong> 元</p>"
max_profit_section = f"<p>最高利润为 <strong>{df['Profit'].max()}</strong> 元</p>"
html_foot = "</body></html>"

# 拼接成完整的HTML正文
mail.HTMLBody = html_head + row_count_section + max_sales_section + max_profit_section + html_foot

小提示

如果你的数据是日期、百分比这类特殊格式,记得提前做格式化处理,比如用df['Date'].max().strftime('%Y-%m-%d')把日期转换成指定的字符串格式,这样邮件里的显示会更规范。

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

火山引擎 最新活动