导出代码如下:
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), PriceExcelModel.class, priceExcelModelList); File file = FileUtil.createFile(PROCEED_DATA_SOURCE_PATH); workbook.write(new FileOutputStream(file)); workbook.close();
当数据量超过65536时,导出结果为多个sheet,会产生不方便阅读的问题。
如果设置最大sheet行,代码如下:
ExportParams exportParams = new ExportParams(); exportParams.setMaxNum(200000); exportParams.setType(ExcelType.HSSF); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, PriceExcelModel.class, priceExcelModelList); File file = FileUtil.createFile(PROCEED_DATA_SOURCE_PATH); workbook.write(new FileOutputStream(file)); workbook.close();
会产生如下报错,如下代码报错:
ERROR 17:00:02 [org.jeecgframework.poi.excel.export.base.ExportBase:213] Invalid row number (65536) outside allowable range (0..65535) java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535) at org.apache.poi.hssf.usermodel.HSSFRow.setRowNum(HSSFRow.java:252) at org.apache.poi.hssf.usermodel.HSSFRow.<init>(HSSFRow.java:86) at org.apache.poi.hssf.usermodel.HSSFRow.<init>(HSSFRow.java:70)
错误源为:
public void setRowNum(int rowIndex) { int maxrow = SpreadsheetVersion.EXCEL97.getLastRowIndex(); if (rowIndex >= 0 && rowIndex <= maxrow) { this.rowNum = rowIndex; if (this.row != null) { this.row.setRowNumber(rowIndex); } } else { throw new IllegalArgumentException("Invalid row number (" + rowIndex + ") outside allowable range (0.." + maxrow + ")"); } }
后来明白了,HSSF最大sheet导出行为65536行,超出后会自动分为多个sheet。
需要导出大量数据到同一个sheet的话,可以通过配置导出类型,代码如下:
ExportParams exportParams = new ExportParams(); exportParams.setType(ExcelType.XSSF);
这样就可以成功导出了。