用办公Agent接管Excel苦力活:跨表匹配、格式清洗、自动图表生成

故事从每个月的第一天说起。

上午9点,运营晓彤打开邮箱,收到三封邮件:

  • 销售部发来"10月订单明细.xlsx",3000行,客户ID、产品名称、金额、下单日期。

  • 财务部发来"10月回款记录.xlsx",2800行,客户ID、回款金额、到账日期。

  • 产品部发来"产品清单.xlsx",200行,产品ID、产品名称、单价、分类。

晓彤的任务:下午5点前交一份"销售月度报表",包含三个部分:

  1. 每个客户的订单总额回款比例(需要跨表匹配)。

  2. 清洗掉格式错误的数据(比如日期列有的是"2024.10.1",有的是"10/1/24",有的是"2024-10-01")。

  3. 自动生成一张各产品类别的销售额柱状图,插进PPT。

她深吸一口气,开始干活。

先用VLOOKUP把回款匹配到订单表,发现客户ID格式不一致------订单表里是"C_001234",回款表里是"1234"。手动改格式花了40分钟。

日期列更崩溃,有200多行格式不对,筛选、替换、分列,折腾了一个小时。

最后做图表,选中数据、插入柱状图、调颜色、改标题、导出图片......又过了半小时。

抬头一看,下午3点了,连午饭都是对着屏幕扒拉的。

"每个月都来一次,比大姨妈还准时。"她苦笑着说。

后来,我们给她做了一个办公Agent------专门干Excel脏活累活的那种。现在她每个月只花15分钟:打开Agent,上传三个文件,喝杯咖啡,回来就收到一份已经处理好、带图表的报表。

这篇文章,我就把那个Agent怎么做跨表匹配、格式清洗、自动图表生成的完整思路掰开来讲。不绕弯子,直接上能用的代码逻辑和避坑指南。

一、先让Agent理解:"我要什么"

晓彤的需求其实很固定,但说给机器听时,需要把它拆成步骤。

我们给Agent的指令模板长这样(自然语言即可):

复制代码
输入:
- 订单表:列名 [客户ID, 产品名称, 金额, 下单日期]
- 回款表:列名 [客户ID, 回款金额, 到账日期]
- 产品表:列名 [产品ID, 产品名称, 分类, 单价]

任务:
1. 将订单表和回款表按客户ID匹配,计算每个客户的订单总额、回款总额、回款比例。
2. 清洗所有日期列:统一转成 YYYY-MM-DD 格式,无效值标记为"错误日期"。
3. 根据产品分类,生成各分类销售额的柱状图,保存为PNG。

输出:一个清洗后的合并表 + 一张柱状图

Agent拿到这个指令后,不会直接"理解",而是调用一系列工具函数。这些函数我们提前写好,Agent只负责按顺序调用。

二、跨表匹配:不用VLOOKUP,用"模糊+精确"两步法

跨表匹配最大的坑:两个表的关联键格式不一致

晓彤那个例子,订单表客户ID是"C_001234",回款表是"1234"。VLOOKUP抓瞎,只能手动给几百行加前缀或截断。

我们的Agent用了两步策略:

第一步:自动探测格式差异

Agent先读取两个表的客户ID列,抽样分析格式特征:

  • 订单表:值类似 C_001234C_005678(带C_前缀,后面跟数字)

  • 回款表:值类似 12345678(纯数字)

Agent判定:两者差异在于"前缀C_"和"前导零"。于是自动生成一个清洗规则:去掉订单表的C_,再把字符串转整数去前导零

第二步:先精确匹配,再模糊匹配

匹配的过程中总有漏网之鱼。比如订单表有"C_01234",回款表有"1234"没问题,但回款表如果有"1234-旧系统"这种带后缀的,精确匹配就会失败。

Agent的匹配逻辑:

  1. 精确匹配:清洗后的ID完全相同。

  2. 模糊匹配:对未匹配上的行,用Levenshtein距离(编辑距离)计算相似度,相似度>0.85就自动匹配,并标记"模糊匹配"。

  3. 人工兜底:仍然匹配不上的行,Agent将其单独输出为一个"待处理"表,让晓彤最后看一眼(通常只有不到1%)。

结果是:3000条订单与2800条回款,匹配成功率达到97%,剩下的几十条是真正的数据错误(比如回款表多了个空格,或者订单表有重复ID)。

避坑提醒:不要用Agent去做100%的全自动匹配。设计一个"低置信度"门槛,把拿不准的交给人。否则你会花更多时间调试。

三、格式清洗:比Excel的"分列"聪明100倍

清洗是Excel苦力活中最恶心的一环。常见脏数据有:

  • 日期格式五花八门:2024.10.110/1/242024-10-011-Oct-24

  • 数字里混着单位:2,000(千分位逗号)、¥300(货币符号)、1.2k(英文缩写)

  • 空白和空格:单元格里有看不见的 或全角空格

  • 不同系统的编码:繁体、简体混用,甚至乱码

我们的Agent内置了一个"清洗工具箱",每个工具对应一种常见问题。

3.1 日期统一

Agent调用date_normalize函数,原理是用dateutil.parser(Python)或类似的解析器,尝试常见格式。实在解析不了的,扔给大模型做一次猜测(比如"Oct 1, 2024"这种)。

复制代码
# 伪代码逻辑
def normalize_date(cell):
    if pd.isna(cell): return "错误日期"
    for fmt in ["%Y-%m-%d", "%Y.%m.%d", "%d/%m/%Y", "%m/%d/%y", "%d-%b-%y"]:
        try:
            return datetime.strptime(str(cell), fmt).strftime("%Y-%m-%d")
        except:
            continue
    # 交给LLM兜底
    return llm_guess_date(cell)

实测可以覆盖98%的日期格式。

3.2 数字清洗

对于金额列,Agent自动去掉货币符号、千分位逗号、单位(比如"k"转1000)。规则也是先抽样探测。

例如发现"金额"列有$1,2001,2001.2k三种写法,Agent会:

  1. 去掉$和逗号 → 1200

  2. 识别1.2k1200

  3. 统一转成浮点数。

3.3 空白和不可见字符

Agent扫描全表,找到所有看起来空但实际有内容的单元格(比如长度>0但只包含空格、制表符、零宽空格),清空或替换为NaN

效果:晓彤原来花1小时的清洗工作,Agent在30秒内完成。而且清洗日志里会记录每一处改动,方便她复核。

四、自动图表生成:不仅画图,还选对图

Excel里插入图表不难,难的是选对图表类型把图表做得像人做的

Agent不会自作主张,它遵循一套简单的决策树:

  • 需要对比几类数值 → 柱状图

  • 需要看占比(百分比)→ 饼图或环形图(如果超过5个类别,改用条形图)

  • 需要看趋势随时间变化 → 折线图

  • 需要看相关性 → 散点图

在晓彤的场景里:各产品类别的销售额对比,显然用柱状图最合适。

4.1 数据聚合

Agent先根据产品表把订单里的产品映射到分类(比如"电子产品"、"办公耗材"),然后按分类汇总销售额。

这一步用pandasgroupbymerge,几行代码的事。

4.2 生成图表

我们用了matplotlib + seaborn,封装成一个函数auto_chart(data, x_col, y_col, chart_type='bar')。输出保存为PNG,同时返回图片的base64编码,方便直接嵌入飞书文档或邮件。

为了让图表"像人做的",Agent还会自动:

  • 添加标题(从上下文推断,比如"各产品类别销售额(2024年10月)")

  • 设置x轴标签旋转(如果文字太长)

  • 在柱子上方显示数值标签

  • 选择配色(用公司品牌色)

4.3 一个真实输出示例

Agent最后生成的图表长这样(文字描述一下):横轴是"电子产品"、"办公耗材"、"家具设备"三个类别,纵轴是销售额(万元)。电子产品的柱子最高,旁边标了"48.2万"。

晓彤只需要把这张图拖进PPT,不需要再用Excel格式刷调半天。

五、把这些串起来:一条Agent调用链

下面是一次完整执行的简化日志,你可以看到Agent是怎么按顺序干活的:

复制代码
[14:00:01] 收到指令:处理三个Excel文件,生成匹配表和柱状图
[14:00:02] 读取订单表(3000行)、回款表(2800行)、产品表(200行)
[14:00:03] 探测到客户ID格式不一致,自动清洗:订单表去掉前缀"C_",回款表转整数
[14:00:05] 执行跨表匹配:精确匹配成功2730行,模糊匹配成功142行,剩余28行待人工
[14:00:06] 清洗日期列:发现3种格式,统一转为YYYY-MM-DD,纠正错误日期17处
[14:00:07] 清洗金额列:去除货币符号和千分位逗号,转换"1.2k"为1200
[14:00:08] 按产品分类聚合销售额,生成柱状图
[14:00:09] 输出文件:cleaned_report.xlsx, sales_chart.png
[14:00:10] 发送消息给晓彤:"处理完成。待人工处理的28条记录已单独导出,请检查。"

耗时9秒。晓彤收到后,花5分钟看了那28条异常记录(大多是回款表里客户ID写错的),修正后重新跑了一次,完美。

六、三个核心坑(以及怎么用代码绕过去)

坑1:大文件内存爆炸

Excel文件超过10万行时,用pandas.read_excel直接加载可能占几个GB内存。我们的Agent做了两件事:

  • 分块读取:对超大文件,按1万行一块处理,逐块清洗后写回。

  • 类型优化:自动将object类型的列转为category(分类),内存占用降低70%。

坑2:清洗规则不是一次就准

第一次跑的时候,Agent把"10/1/24"解析成了2010年1月24日(因为默认月日顺序错了)。后来我们加了一个地域推断:根据文件创建者的时区或数字格式偏好,猜测是"月/日/年"还是"日/月/年"。同时允许用户在界面上手动纠正一条规则,Agent会记住并应用到下次。

坑3:图表总被嫌弃"不好看"

业务方总想改配色、字体、图例位置。我们的解决方案不是让Agent自动猜审美,而是允许用户上传一个"图表模板"(比如一个空白的Excel,带好喜欢的颜色和样式),Agent生成图表时优先复用模板里的设置。这样既保持了自动化,又把风格决定权握在人手里。

七、如果你也想让Agent替你干Excel的脏活

不一定需要大模型。很多清洗和匹配工作,用pandas + openpyxl + 几条规则就能完成。大模型只用在三个地方:

  • 日期/数字格式的智能猜测(当规则解析失败时)

  • 生成自然语言的清洗日志(便于人理解修改了什么)

  • 处理极不规范的表格(比如合并单元格、多行标题)

剩下的,用代码就可以。

晓彤现在每个月第一天的早上,会先打开Agent对话框,发送三样东西:三个Excel文件,一行字"帮我生成月度报表"。然后她去泡咖啡。等她回来,报表已经躺在文件夹里,图表也备好了。

她说:"以前我觉得Excel熟练就算本事,现在觉得,能把这种本事教给机器才是本事。"

Excel苦力活的终点,不是更熟练地使用VLOOKUP,而是再也不用手动VLOOKUP。 如果你也受够了每个月翻来覆去地跨表匹配、清洗格式、做图表,不妨从这个月开始,给自己写一个最简单的脚本------比如先搞定"日期统一格式"这一件事。你会发现,从那里起步,Agent离你并不远。

相关推荐
广州创科水利2 小时前
广州创科:以硬核科技与全栈能力,守护边坡安全监测防线
大数据·网络·人工智能
Elastic 中国社区官方博客2 小时前
Elasticsearch ES|QL “读取时模式”:你的未映射字段一直都在那里
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索
Elastic 中国社区官方博客2 小时前
Elasticsearch 查询日志:每个查询一行协调器级别日志,适用于 ES|QL、DSL、SQL 和 EQL
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索·可用性测试
云栖梦泽在3 小时前
AI安全入门:如何快速识别AI系统的安全漏洞
大数据·人工智能·安全
covco11 小时前
矩阵管理系统指南:拆解星链引擎的架构设计与全链路落地实践
大数据·人工智能·矩阵
陕西字符12 小时前
2026 西安 豆包获客优化技术深度解析:企来客科技 AI 全域获客系统测评
大数据·人工智能
virtaitech13 小时前
算力浪费与算力饥渴并存,OrionX社区版免费开放能否破解这一困局?
大数据·人工智能·gpu算力
青春万岁!!14 小时前
hive模型数据异常-作业调度问题
大数据·数据仓库·hive
QYR-分析14 小时前
压力电气转换器行业市场现状与发展前景分析
大数据·人工智能