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

从Outlook附件TXT动态提取数据并合并至Excel的技术问题

解决方案

一、处理Description区域的动态提取问题

由于Description条目长度不固定,依赖索引提取不可靠,建议基于关键字边界匹配的方式定位内容,核心思路是找到Description的起始标识和下一个固定业务字段的结束标识,提取中间内容:

方法1:字符串分割定位

假设TXT内容中存在明确的起始标记(如Description:)和后续固定字段(如Client:),可以用字符串切片提取:

with open(txt_file_path, 'r', encoding='utf-8') as f:
    content = f.read()

# 定位起始和结束边界
desc_start = content.find('Description:') + len('Description:')
# 假设下一个固定字段是'Client',根据实际业务字段调整
desc_end = content.find('Client:', desc_start)
# 提取并清理内容
description = content[desc_start:desc_end].strip()

方法2:正则表达式匹配

如果字段边界有多种格式,用正则匹配更灵活,比如匹配Description:之后直到下一个大写开头的业务字段名:

import re

with open(txt_file_path, 'r', encoding='utf-8') as f:
    content = f.read()

# 正则匹配:提取Description后的内容,直到下一个大写字母开头的字段
match = re.search(r'Description:\s*(.*?)(?=\n[A-Z][a-z]+:)', content, re.DOTALL)
if match:
    description = match.group(1).strip()

二、解决pandas写入Excel仅保留最后一个文件数据的问题

问题根源是每次写入默认覆盖原有文件,解决方案有两种:

方法1:统一收集数据后写入

初始化空列表存储所有文件的业务数据,遍历每个文件时将提取到的字典追加到列表,最后一次性转成DataFrame写入:

import pandas as pd

# 初始化空列表存储所有数据
all_data = []

# 遍历所有Outlook附件TXT文件(假设已获取所有文件路径)
for txt_path in all_txt_paths:
    # 执行你已有的Client、Project提取逻辑
    client = extract_client(txt_path)
    project = extract_project(txt_path)
    # 用上述方法提取Description
    description = extract_description(txt_path)
    
    # 将单条数据存入字典,追加到列表
    all_data.append({
        'Client': client,
        'Project': project,
        'Description': description
    })

# 统一写入Excel
pd.DataFrame(all_data).to_excel('业务数据汇总.xlsx', index=False)

方法2:使用ExcelWriter追加写入(适合大文件分批处理)

如果数据量较大,不想一次性加载到内存,可以用pd.ExcelWriter的mode='a'参数追加,注意避免重复写入表头:

import pandas as pd
from openpyxl import load_workbook

for idx, txt_path in enumerate(all_txt_paths):
    # 提取单文件数据并转成DataFrame
    data = extract_single_file_data(txt_path)
    df = pd.DataFrame([data])
    
    # 第一次写入创建文件并写表头,后续追加跳过表头
    if idx == 0:
        df.to_excel('业务数据汇总.xlsx', index=False)
    else:
        with pd.ExcelWriter('业务数据汇总.xlsx', mode='a', engine='openpyxl', if_sheet_exists='overlay') as writer:
            df.to_excel(writer, index=False, header=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:27:19