EasyPoi导出问题

导出代码如下:
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);

这样就可以成功导出了。

原文地址:https://www.cnblogs.com/sunshinekevin/p/11492802.html