NPOI是一个C#中操作EXCEL比较方便的库,在已有报表模板情况下,将数据导出到报表模板并存储为新报表文件步骤如下:

  1. 打开报表模板
  2. 写入数据
  3. 保存报表文件

在实际使用中报表模板文件可能仅保留特定行模板数据,当数据超出报表保留行数时增加新行,使用NPOI增加新行并保留数据格式操作步骤如下:

  1. 获取行
  2. 判定行是否为空,若为空创建新行并设定行内单元格样式
  3. 写入数据

IWorkbook workbook = new XSSFWorkbook("报表模板.xlsx"); ISheet sheet = workbook.GetSheetAt(0); IRow row; int rowCount = 0; while (sdr.Read()) { //跳过表头 int rowIdx = rowCount + 2; int cellIdx = 0; row = sheet.GetRow(rowIdx); //超出预留数据行 if (null == row) { row = sheet.CreateRow(rowIdx); //源样式行 IRow rowFirstData = sheet.GetRow(3); //设定Cell边框 for (int i = 0; i < 8; ++i) { ICell cell = row.CreateCell(i); ICell cellSrc = rowFirstData.GetCell(i); cell.CellStyle = cellSrc.CellStyle; } row.RowStyle = rowFirstData.RowStyle; } //序号 row.GetCell(cellIdx++).SetCellValue(rowCount + 1); //..... //合格判定 bool isOk = Convert.ToBoolean(sdr["Judge"]); row.GetCell(cellIdx++).SetCellValue(isOk ? "是" : "否"); ++rowCount; } //保存到新文件 using (var fsDst = new FileStream(sTargetFile, FileMode.Create, FileAccess.Write)) { workbook.Write(fsDst); }