如何使用C# NPOI包创建并保存数据透视表?代码无错但Excel无法打开
问题根因
你当前代码仅完成了数据透视表的空对象初始化,没有为其配置任何行标签、列标签、聚合值字段,导致生成的pivotCacheDefinition.xml、pivotTable1.xml两个文件结构不符合Excel格式规范,打开时校验失败被自动删除。
修复后的完整代码
public void Execute() { IWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet("sample"); IRow row0 = sheet.CreateRow(0); row0.CreateCell(0).SetCellValue("test"); row0.CreateCell(1).SetCellValue("a"); row0.CreateCell(2).SetCellValue("b"); IRow row1 = sheet.CreateRow(1); row1.CreateCell(0).SetCellValue("asd"); row1.CreateCell(1).SetCellValue("das"); row1.CreateCell(2).SetCellValue("fgh"); var tl = row0.GetCell(0); var br = row1.GetCell(2); CellReference topLeft = new CellReference(tl); CellReference botRight = new CellReference(br); AreaReference aref = new AreaReference(topLeft, botRight); CellReference pos = new CellReference(3, 3); XSSFPivotTable pivotTable = sheet.CreatePivotTable(aref, pos); // 新增部分:配置透视表字段,可根据业务需求调整 // 添加行字段:数据源第0列作为行标签 pivotTable.AddRowField(0); // 添加值字段:对数据源第1列做求和聚合 pivotTable.AddDataField(1, NPOI.SS.UserModel.DataConsolidateFunction.Sum, "求和项:a"); using (FileStream fileWritter = new FileStream("test.xlsx", FileMode.Create, FileAccess.Write)) { workbook.Write(fileWritter); } }
其他注意事项
- 若修改后仍存在报错,可将NPOI版本升级至2.6.0及以上稳定版,旧版本存在部分透视表生成兼容性问题
- 可根据实际业务需求调整
AddRowField(行标签)、AddColumnField(列标签)、AddDataField(值字段)的参数,自定义透视表结构
内容的提问来源于stack exchange,提问作者Tien Dang
相关产品推荐
相关产品推荐

