Caxlsx在pivot_table.data设置多列时生成的数据透视表无效
问题根因
该报错是Caxlsx处理多数据字段透视表的已知特性:当pivot_table.data配置了2个及以上字段时,必须显式指定*值字段(Values)*的摆放位置(行/列维度),否则生成的透视表XML结构不符合微软Excel的格式规范,会触发打开报错。单数据字段时Excel可兼容缺省配置,因此不会报错。
修复后的代码
仅需在透视表配置块中新增一行指定值字段的摆放位置即可,示例如下:
require 'caxlsx' p = Axlsx::Package.new wb = p.workbook wb.add_worksheet(name: 'Basic Worksheet') do |sheet| sheet.add_row ['Month', 'Year', 'Type', 'Sales', 'Customers', 'Region'] # 生成模拟数据 30.times do sheet.add_row [ ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'].sample, [2010, 2011, 2012].sample, ['Meat', 'Dairy', 'Beverages', 'Produce'].sample, rand(5000), rand(100), ['East', 'West', 'North', 'South'].sample ] end sheet.add_pivot_table 'H4:M17', 'A1:F31' do |pivot_table| pivot_table.rows = ['Month', 'Year'] pivot_table.columns = ['Values'] # 新增行:指定多个值字段放在列维度展示 pivot_table.data = ['Sales', 'Customers'] pivot_table.pages = ['Region'] end end p.serialize 'pivot_table_example.xlsx'
补充说明
- 如果需要把多个值字段放在行维度展示,将
['Values']赋值给pivot_table.rows数组即可 - 可根据业务需求调整值字段的聚合方式,通过
pivot_table.data_fields修改求和、计数等统计逻辑
内容的提问来源于stack exchange,提问作者Nikita Pyatov
相关产品推荐
相关产品推荐

