Pivot Table Generator
触发条件
当用户提供一个 Excel 数据源文件,并需要生成数据透视表时使用此技能。
触发关键词:透视表、pivot、门店订货需求数、商品名称、门店自定义序号、做个表、数据透视
数据透视表规则
- 行 (Rows): 商品名称
- 列 (Columns): 门店自定义序号
- 值 (Values): 求和项:门店订货需求数
- 总计列: 在商品名称后面添加一列"总计",值为该商品所有门店的订货需求数之和
- 排序: 按总计列从大到小排序(降序)
- 列合计行: 在第二行(表头下方)添加一行"合计",汇总每一列所有商品的数据之和
- 输出位置: 以新的 sheet 页添加到用户提供的原始数据源文件中
执行流程
Step 1: 读取数据源文件
用 openpyxl 或 pandas 读取用户提供的 xlsx 文件,获取所有数据列名,确认以下字段存在:
- 商品名称
- 门店自定义序号
- 门店订货需求数
如果列名不完全匹配,检查是否存在相似列名(如"门店订货需求"等),并告知用户确认。
Step 2: 生成透视表数据
用 pandas 生成 pivot_table:
pivot = df.pivot_table(
index='商品名称',
columns='门店自定义序号',
values='门店订货需求数',
aggfunc='sum',
fill_value=0
)
Step 3: 添加总计列并排序
pivot['总计'] = pivot.sum(axis=1)
pivot = pivot.sort_values('总计', ascending=False)
将"总计"列移到商品名称后面(即DataFrame的第二列位置)。
Step 4: 写入新 sheet 页
使用 openpyxl 将透视表数据写入原文件的新 sheet 页:
- sheet 页名称: "数据透视表"(如果已存在则追加日期后缀避免冲突)
- 第一行写列标题(门店自定义序号值 + "总计")
- 第二行写"合计"行,汇总每一列所有商品的数值之和
- 第一列写商品名称(从第三行开始)
- 保持原文件所有内容不变,仅在末尾新增 sheet
Step 5: 格式美化
- 表头行加粗、居中
- 数值列右对齐
- 添加边框线
- 冻结首行和首列方便查看
- 列宽自适应
注意事项
- 不要修改原文件中的任何现有数据或 sheet 页
- 如果某个商品在某门店没有数据,对应单元格填 0
- 门店自定义序号列的各值作为透视表的列标题
- 输出文件即原文件本身(不是另存为新文件)
- 完成后告知用户透视表已添加到哪个 sheet 页
依赖
- openpyxl
- pandas
使用隔离的 Python 环境安装:
C:\Users\Administrator\.workbuddy\binaries\python\envs\default\Scripts\pip.exe install openpyxl pandas
运行脚本:
C:\Users\Administrator\.workbuddy\binaries\python\envs\default\Scripts\python.exe <script_path>