zoukankan      html  css  js  c++  java
  • 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);

    这样就可以成功导出了。

  • 相关阅读:
    设计模式总结
    字符编码小结
    搞定java.io
    将代码托管到GitHub上
    linuxlinux 路由表设置 之 route 指令详解 路由表设置 之 route 指令详解
    linux子系统的初始化_subsys_initcall()
    Linux系统目录结构介绍
    EtherType :以太网类型字段及值
    socket编程原理
    linux下的网络接口和网络桥接
  • 原文地址:https://www.cnblogs.com/sunshinekevin/p/11492802.html
Copyright © 2011-2022 走看看