導出代碼如下:
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);
這樣就可以成功導出了。