zoukankan      html  css  js  c++  java
  • POI导出数据内存溢出问题《转》

    POI之前的版本不支持大数据量处理,如果数据过多则经常报OOM错误,有时候调整JVM大小效果也不是太好。3.8版本的POI新出来了SXSSFWorkbook,可以支持大数据量的操作,只是SXSSFWorkbook只支持.xlsx格式,不支持.xls格式。

    3.8版本的POI对excel的导出操作,一般只使用HSSFWorkbook以及SXSSFWorkbook,HSSFWorkbook用来处理较少的数据量,SXSSFWorkbook用来处理大数据量以及超大数据量的导出。
    HSSFWorkbook的使用方法和之前的版本的使用方法一致,这里就不在陈述使用方法了
    SXSSFWorkbook的使用例子如下:
    import junit.framework.Assert;
    import org.apache.poi.ss.usermodel.Cell;  
    import org.apache.poi.ss.usermodel.Row;  
    import org.apache.poi.ss.usermodel.Sheet;  
    import org.apache.poi.ss.usermodel.Workbook;  
    import org.apache.poi.ss.util.CellReference;  
    import org.apache.poi.xssf.streaming.SXSSFWorkbook;  
    public static void main(String[] args) throws Throwable {  
     Workbook wb = new SXSSFWorkbook(100); // keep 100 rows in memory, exceeding rows will be flushed to disk  
     Sheet sh = wb.createSheet();  
     for(int rownum = 0; rownum < 100000; rownum++){ 
     Row row = sh.createRow(rownum);  
     for(int cellnum = 0; cellnum < 10; cellnum++){  
     Cell cell = row.createCell(cellnum);  
     String address = new CellReference(cell).formatAsString();  
     cell.setCellValue(address); }  
     } 
    FileOutputStream out = new FileOutputStream("/temp/sxssf.xlsx");  
     wb.write(out);  
     out.close(); 
    }
     
    以上是转载的
     
    值得注意的是SXSSFWorkbook只能写不能读。但是往往我们需要向一个Excel模版里导出数据,这样才更好提前定义里面的格式和vba代码。
    这里就需要使用SXSSFWorkbook的另外一个构造函数:
    SXSSFWorkbook(XSSFWorkbook workbook)
    Construct a workbook from a template.
     
    通过XSSFWorkbook来读取模版,然后用SXSSFWorkbook来设置样式和写数据,详细使用就参考API吧。
     
    http://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html
  • 相关阅读:
    (转)使用InfluxDB+cAdvisor+Grafana配置Docker监控
    Linux cut命令
    php 三种数组
    Linux httpd源码编译安装
    Linux yum如何下载rpm包到本地
    linux yum 工具
    windows phpstudy 本地添加自定义域名
    php.ini
    Linux rpm 查询
    linux rpm 安装和卸载
  • 原文地址:https://www.cnblogs.com/BigIdiot/p/2789067.html
Copyright © 2011-2022 走看看