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);

這樣就可以成功導出了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM