咨询:使用Openpyxl在Excel中创建数据透视表的可行性与实操示例
使用openpyxl创建Excel数据透视表的实操方案
当然可以用openpyxl创建数据透视表!你提到的文档对应的是openpyxl 2.5及以上版本,这个版本确实引入了透视表的创建支持,下面给你一个完整的实操示例,帮你快速上手:
完整代码示例
from openpyxl import Workbook from openpyxl.pivot.fields import RowField, ColumnField, DataField from openpyxl.pivot.table import PivotTable # 初始化工作簿和工作表 wb = Workbook() ws = wb.active ws.title = "销售数据" # 填充模拟的业务数据(包含表头) sales_data = [ ["区域", "产品类别", "销售额", "销售数量"], ["华东", "电子产品", 25000, 100], ["华东", "家居用品", 18000, 90], ["华北", "电子产品", 22000, 88], ["华北", "家居用品", 15000, 75], ["华南", "电子产品", 28000, 112], ["华南", "家居用品", 16000, 80], ["西南", "电子产品", 19000, 76], ["西南", "家居用品", 12000, 60] ] for row in sales_data: ws.append(row) # 创建数据透视表 # 参数说明: # - ws: 数据源所在的工作表 # - source_range: 数据源的单元格范围(要包含表头) # - ref: 透视表放置的起始单元格位置 pivot_table = PivotTable( ws, source_range="A1:D9", ref="F1" ) # 设置透视表的字段 # 行字段:按“区域”分组 pivot_table.add_field(RowField("区域")) # 列字段:按“产品类别”分组 pivot_table.add_field(ColumnField("产品类别")) # 数据字段1:对“销售额”求和 pivot_table.add_field(DataField("销售额", function="sum")) # 数据字段2:对“销售数量”求平均值 pivot_table.add_field(DataField("销售数量", function="average")) # 保存工作簿 wb.save("销售数据透视表.xlsx")
关键注意事项
- 版本要求:必须使用openpyxl 2.5及以上版本,旧版本确实不支持透视表创建
- 数据源范围:一定要包含表头行,否则透视表无法正确识别字段
- 聚合函数:
DataField的function参数支持sum、count、average、max、min等常用函数 - Excel显示问题:用openpyxl创建的透视表,首次在Excel中打开时可能需要手动点击「刷新」按钮,才能显示完整的格式和计算结果
- 字段命名:要确保数据源的表头名称和代码中引用的字段名完全一致,否则会报错
内容的提问来源于stack exchange,提问作者Parth Karia




