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

Python新手求助:提取邮件HTML表格合并为Pandas DataFrame并导出Excel

解决Outlook邮件HTML表格合并为统一DataFrame的方案

核心思路

先将每个邮件中的HTML表格解析为结构一致的DataFrame,再通过Pandas的合并函数将所有DataFrame拼接成一个统一表格,最后导出到Excel。

分步实现

1. 标准化单个邮件表格的解析

  • 用pandas.read_html()解析HTML表格,该函数返回DataFrame列表,单表格场景取第一个元素即可。
  • 统一列名:不同邮件的表格列名可能存在大小写、空格差异,提前标准化列名(比如转小写、替换空格为下划线)。
  • 对齐列结构:提前定义目标列名,对每个解析后的DataFrame进行列重排,缺失列用NaN填充。

2. 合并所有DataFrame

使用pd.concat()将所有标准化后的DataFrame合并,设置ignore_index=True重置全局索引,避免索引冲突。

完整示例代码

import pandas as pd
import numpy as np
import win32com.client
from bs4 import BeautifulSoup  # 可选,用于清理复杂HTML

# 初始化Outlook连接
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
target_folder = outlook.GetDefaultFolder(6)  # 6对应收件箱,可替换为你的目标文件夹
messages = target_folder.Items

# 存储处理后的DataFrame列表
processed_dfs = []
# 定义目标列结构(根据你的实际表格列名调整)
target_cols = ['order_id', 'customer_name', 'order_amount', 'order_date']

for msg in messages:
    # 仅处理HTML格式的邮件
    if msg.BodyFormat != 2:
        continue
    
    try:
        # 清理HTML(可选,应对嵌套/复杂表格)
        soup = BeautifulSoup(msg.HTMLBody, 'html.parser')
        table_tag = soup.find('table')  # 取第一个表格
        if not table_tag:
            print(f"邮件 {msg.Subject} 未找到表格,跳过")
            continue
        
        # 解析表格为DataFrame
        table_df = pd.read_html(str(table_tag))[0]
        
        # 标准化列名
        table_df.columns = [col.strip().lower().replace(' ', '_') for col in table_df.columns]
        
        # 对齐目标列,缺失列补NaN
        table_df = table_df.reindex(columns=target_cols, fill_value=np.nan)
        
        # 添加到列表
        processed_dfs.append(table_df)
    except Exception as e:
        print(f"处理邮件 {msg.Subject} 失败: {str(e)}")
        continue

# 合并所有DataFrame
final_df = pd.concat(processed_dfs, ignore_index=True)

# 导出到Excel
final_df.to_excel("邮件表格汇总.xlsx", index=False)

注意事项

  • 如果邮件表格存在多行表头,可在pd.read_html()中指定header参数(比如pd.read_html(str(table_tag), header=1)[0])。
  • 若部分表格结构差异过大(比如列数完全不同),可在代码中添加判断逻辑过滤这类表格,避免合并出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:35:23