ARTICLE · 1041931
AI+pandas自动出报表:Excel一键变可视化周报

每个月末/周末,最磨人的不是"做分析",是"把数据搬来搬去、调格式、画图、写摘要"——纯体力活。
放现在,这事已经可以全自动了:pandas负责算数、openpyxl负责出带图表的漂亮表格、AI负责把数字写成人话摘要。一条命令,把一下午变成一分钟。
这篇用一个真实销售场景,带你把"原始交易表"变成"带图表+执行摘要的周报"。
全程代码,复制就能改。
一、为什么是这三件套
●pandas:读 Excel、分组聚合、算 KPI,几行搞定;
●openpyxl:在Excel里画原生柱状图、调字体列宽,比截图好看也好改;
●AI API:把算好
的数字变成一段"老板能看懂"的总结,只喂聚合数字,不喂原始客户行。
安全红线:发给 AI 的只有汇总 KPI,绝不包含客户姓名、金额明细等原始行。隐私靠"先聚合、后上传"守住。

二、实战代码:从原始表到周报
分步执行细节
- pandas:本地聚合算 KPI
读取 Excel 原始明细表,完成数据清洗、多表合并后,按业务维度(部门、周期、品类等)分组聚合,批量计算销售额、完成率、环比同比等核心指标。输出仅为汇总级 KPI 数据表,自动过滤客户姓名、单笔订单等原始明细行。 - openpyxl:生成原生可编辑图表
基于聚合后的 KPI 数据,直接在 Excel 文件内生成原生柱状图、折线图;批量统一字体、列宽、配色样式,生成的图表可直接编辑修改,无需截图粘贴,输出即可用作正式汇报文件。 - AI API:生成管理层可读总结
仅提取汇总后的 KPI 数字(如总营收、增长率、排名等)调用 AI 接口,指令 AI 按管理层视角输出精简的业务结论,突出核心数据、异常波动与建议。全程不向 AI 传输任何原始明细数据。
步骤-准备数据并聚合(pandas)
python
import pandas as pd
AI+pandas自动出报表:Excel一键变可视化周报
df = pd.read_excel("sales_aug_2026.xlsx")df["Revenue"] = df["Units"] * df["UnitPrice"]
AI+pandas自动出报表:Excel一键变可视化周报
by_region = (df.groupby("Region", as_index=False)["Revenue"].sum().sort_values("Revenue", ascending=False))by_product = (df.groupby("Product", as_index=False).agg(Units=("Units","sum"), Revenue=("Revenue","sum")))kpis = {"总营收": int(df["Revenue"].sum()),"总销量": int(df["Units"].sum()),"订单数": len(df),"头部区域": by_region.iloc[0]["Region"],}print(by_region.to_string(index=False))print(kpis)```
步骤-写出带图表的 Excel(openpyxl)
```pythonfrom openpyxl import Workbookfrom openpyxl.chart import BarChart, Referencefrom openpyxl.styles import Fontwb = Workbook()ws = wb.activews.title = "Summary"ws.append(["指标","数值"])for k, v in kpis.items():ws.append([k, v])ws["A1"].font = Font(bold=True)
AI+pandas自动出报表:Excel一键变可视化周报
start = ws.max_row + 2ws.cell(start, 1, "区域"); ws.cell(start, 2, "营收")for i, row in by_region.iterrows():ws.cell(start+1+i, 1, row["Region"])ws.cell(start+1+i, 2, int(row["Revenue"]))chart = BarChart()data = Reference(ws, min_col=2, min_row=start,max_row=start+len(by_region))cats = Reference(ws, min_col=1, min_row=start+1,max_row=start+len(by_region))chart.add_data(data, titles_from_data=False)chart.set_categories(cats)chart.title = "各区域营收"ws.add_chart(chart, "D2")wb.save("周报_销售.xlsx")```
步骤-让 AI 写执行摘要(只喂 KPI)
```pythonfrom openai import OpenAIimport os, jsonclient = OpenAI() # 环境变量 OPENAI_API_KEYdef write_summary(kpis: dict, by_region: pd.DataFrame) -> str:brief = {"kpis": kpis,"region_rank": by_region.to_dict("records")}resp = client.chat.completions.create(model="gpt-4o-mini",messages=[{"role":"system","content":"你是商业分析师,基于提供的聚合KPI写3句话执行摘要,""不编造、不出现具体客户名。"},{"role":"user","content": f"数据:{json.dumps(brief, ensure_ascii=False)}"}],temperature=0.3)return resp.choices[0].message.contentprint(write_summary(kpis, by_region))```
三步串起来,原始表进去、带图周报出来。把脚本绑个定时任务,每月 1 号自动跑,你只管看结果。
三、边界提醒
边界 1:AI 只看聚合数字。上面 `brief` 里只有 KPI 和区域排名,没有一行原始客户数据——这是隐私底线,别图省事把整表丢给 API。
边界 2:AI 摘要要核对。它写的"增长原因"可能是猜的。对外汇报前,自己确认数字和结论对得上。
边界 3:大表先采样。数据超 10 万行,绘图前先采样或分组,否则卡死。

不可突破的安全红线
严格执行先聚合、后上传原则:
允许上传 AI 的内容:仅聚合后的 KPI 数值、维度名称 禁止上传的内容:客户姓名、手机号、单笔金额、明细行数据等原始敏感信息 所有明细数据的计算、存储全程在本地完成,AI 侧仅接触无敏感的汇总结果
写在最后
报表的本质是"把数字变成决策",重复劳动交给代码,你的时间该花在判断上,不是搬运上。
这套模板换个数据源(运营数据、库存、流量)照样用。你最想自动化哪张表?评论区说。

提示:本文为个人实操记录与经验分享,仅代表个人观点,文中所涉 AI 工具各有场景边界,相关操作请结合自身环境谨慎验证。