You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:39:03