Excel图表报告
拿到的是三样能直接用的东西:
- 几张 PNG 图:趋势、占比、排行,配好中文标题和单位,可以直接贴进 PPT 或周报。
- 一段中文分析:三到六条,讲趋势、占比和异常,每条都带着表里的具体数字。
- 一份 xlsx:「图表」页放 Excel 原生图表,引用「汇总」页的数,改了数图会跟着变。
图上和分析里的每个数字都能在你的表里找到出处。表格只在你本机处理,不上传到收款接口。
给要把一张业务表快速变成汇报材料的运营、销售、财务和老师用。
示例:用这张表做图表报告,看各渠道 1-9 月的趋势和占比。一次 1.00 元。
支付宝服务标识:API_59889EA37657438C。资源是 POST https://49.232.229.62/v1/chart。
触发词
Excel 图表、做图表、表格出图、数据可视化、图表报告、销售趋势图、占比图、排行图、表格分析。用户只问某一格的数或一个简单求和时,直接回答,不必出报告,也不必付款。
输入参数
| 参数 | 必填 | 说明 |
| --- | --- | --- |
| note | 是 | 一句话说明这张表是什么、想看什么,例如「1-9月各渠道销售额,看趋势和占比」。POST 正文只有这一个字段。不要把表里的数据或客户名写进 note,它会出现在付款说明里 |
| 数据文件 | 是 | CSV、xlsx 或 xls。没有文件就停,不要用示例数据充数 |
| 工作表 | 否 | 多个工作表时指定用哪个。不说就用第一个非空表,并在说明里写明 |
| 关注的列 | 否 | 比如「只看销售额和订单数」。不说就按下面的规则自动选 |
| 输出位置 | 否 | 默认在源文件旁新建 <源文件名>_图表报告/。同名文件夹加序号,不覆盖 |
POST 正文始终是同一份 JSON,例如 {"note":"表格用途或想看什么"}。probe、pay、complete 都复用这一份,不改字段、不改 URL。
价格
一次 1.00 CNY(1.00 元/次)。价格以服务端 402 账单为准,请求体里不写金额,也不要改单价。
安装买家依赖
买家机器执行一次,不要把这个包装进技能 zip:
npx -y @alipay/agent-payment@latest install
装好后应能运行 alipay-bot。卖家 SDK @alipay/alipay-aipay 只留在服务端,用来验凭证和做商家履约确认。不要把它装进本技能,也不要把它当成买家付款工具。后端源码不在本包里。
调用流程
先把输入收齐再付款:数据文件能打开,要用哪个工作表已经确定。缺了就先问用户,不要先收钱。
付款只走官方买家 CLI。不要自写签名,不要自己拼 Payment-Proof。
状态目录用 .state/<session-id>,权限保持私有。这个目录、.env、node_modules 都不要打进发布包。
- probe:请求资源。未付款时应返回 HTTP 402,响应头里有
Payment-Needed。脚本把该头的原文字节写入 mode 600 的文件,不解码、不改写。状态不是 402,或没有这个头,就停止,不要进入 pay。
node scripts/excel-chart-report-paid.mjs probe --note '表格用途或想看什么' --state-dir '.state/SESSION_KEY'
- pay:把账单和原始资源请求交给官方 CLI,展示支付入口,然后停下来等用户付完。教程写出的参数只有这些。POST 正文不另造参数名;正文就是 probe 那一份 JSON,写进
--intent-summary,并保存在订单状态里。
node scripts/excel-chart-report-paid.mjs pay --state-dir '.state/SESSION_KEY' --session-id 'SESSION_KEY'
对应命令:
alipay-bot 402-buyer-pay --session-id 'SESSION_KEY' --file '.state/SESSION_KEY/payment-needed.txt' --resource-url 'https://49.232.229.62/v1/chart' --method POST --intent-summary '原始请求:生成Excel图表报告。POST 正文是同一份 JSON:{"note":"表格用途或想看什么"}'
- complete:用户付完后,用同一笔
out-shake-no查询原订单。官方 CLI 会带Payment-Proof重试同一资源 URL、同一 POST。没有out-shake-no就拒绝运行。成功路径不要再发一条独立回执。若 CLI 明确说回执失败,原样告诉用户,并用同一单再跑 complete。
node scripts/excel-chart-report-paid.mjs complete --state-dir '.state/SESSION_KEY' --out-shake-no 'OUT_SHAKE_NO'
对应命令:
alipay-bot 402-query-payment-status --out-shake-no 'OUT_SHAKE_NO' --resource-url 'https://49.232.229.62/v1/chart' --method POST
查询通过后,接口只确认这笔已经付款。图表、分析和工作簿由本技能按下面的规则,在本机从用户的表生成。接口不代算数据,也不接收表格。
支付规则
- 未付款:服务端返回 HTTP 402 和
Payment-Needed。这时不要开始做图表和分析。 - 付款后:用
Payment-Proof重试同一次请求。URL、方法、{"note":...}都保持不变。 - 服务端验证凭证和订单。凭证无效或过期时不交付,脚本不得把失败响应当成图表和分析。
- 资源返回后,商家履约确认由服务端完成。买家 CLI 在成功路径里处理回执,脚本不再额外发送回执。回执失败就用同一
out-shake-no重试 complete。 - 订单写在状态文件里,可以恢复。同一
out-shake-no可以重复查询。已经有订单号时,probe 和 pay 都会拒绝再开一单。不要让用户为同一笔再付一次。
读表
用本机的 Python(pandas、openpyxl、matplotlib)读表和出图。缺库时先告诉用户要装哪几个,用户同意再装。旧版 xls 还需要 xlrd,装不了就请用户在 Excel 里另存为 xlsx。
- 找到真正的表头行(跳过标题行和空行),合并单元格按首格的值展开。
- xlsx 用缓存值读公式(
data_only=True)。公式格没有缓存值(文件没在 Excel 里保存过)时,告诉用户先在 Excel 里打开保存一次,不要自己重算后冒充原值。 - 识别三类列:日期列、数值列、类别列。带千分位、货币符号、百分号的文本转成数值;转不了的格子记为「非数值」,不填 0,不删整行。
- 合计行、小计行不参与做图,免得重复计数。
- 文件超过 50MB 或 100 万行,先问用户要不要筛一段时间或几个类别,不要偷偷抽样。
选图
最多 6 张,每张回答一个问题,不为凑数做图:
- 趋势:有日期列时,按日、周或月汇总后画折线。不到 3 个时间点就不画趋势。
- 占比:类别不超过 6 个、数值都不为负、加起来就是整体时,画环形图;否则画横向条形图并标百分比。
- 排行:类别多时画前 10 横向条形图,其余合并成「其他」并注明。
- 对比:两个以上数值列、量纲相同时画分组柱状图;量纲不同就分开画,不用双轴硬凑。
每张图都要有中文标题、坐标轴名和单位(单位只用表头里有的)。中文显示成方框时,换系统里有的中文字体(如 Noto Sans CJK、思源黑体、微软雅黑、苹方)。PNG 按 01_趋势_销售额.png 这样编号命名,200 dpi。
分析怎么写
三到六条,按「趋势、占比、异常」的顺序,每条一两句,必须带数字,例如「9 月销售额 12.4 万,比 8 月多 18%」。
- 数字只来自你算出的汇总表,百分比保留一位小数,金额沿用表里的单位。
- 异常用写明的规则判断:数值在四分位距 1.5 倍以外,或环比变化超过 ±50%。规则写进说明,不凭感觉点名。
- 只说表里看得出的事;原因不知道就写「表里看不出原因」,不编市场解释。
- 不做预测。用户明确要时,只给简单线性外推,并标明「仅按历史趋势外推,不是预测」。
- 数据有缺口(空月份、非数值格、被排除的合计行),在最后一条说明有多少、影响哪张图。
工作簿
新建 <源文件名>_图表报告.xlsx,不改原文件,四个工作表:
- 数据:本次用到的清洗后数据。
- 汇总:每张图用到的汇总数,一张图一块区域,标好图名。
- 图表:用 openpyxl 建 Excel 原生图表,引用「汇总」里的单元格,和 PNG 一一对应。
- 说明:分析原文、异常规则、数据缺口、源文件名和读取的工作表。
回复用户
用中文短回复:先贴三到六条分析,再给输出文件夹绝对路径,以及 PNG 和 xlsx 的文件名。点出数据缺口。CLI 的支付输出按原样给用户。
边界
- 不造数、不补空格、不平滑数据;图上每个点都能在「汇总」里找到。
- 不做财务审计、统计显著性检验或因果结论。
- 图片识别出来的表格、截图里的数字,先请用户核对后再做图。
- 不读取私钥,不把密钥、
.env或服务端源码放进技能包。
微信扫一扫