zoukankan      html  css  js  c++  java
  • java POI 写入百万数据到 excel

    .xls文件只支持6w+的数据写入

    .xlsx文件只支持104w+数据的写入

    在java中jxl工具类只能操作.xls的文件,不能操作.xlsx的文件

    POI工具类能够支持.xlsx的文件操作。

      excel的数据读写都相应的简单,网上也有很多的代码,我这里要说的是怎么样写入100w+的数据到Excel中。

       在POI中,XSSFWorkbook  wb = new XSSFWorkbook ();创建的工作簿能够写入大量的数据,但很大的可能下会虚拟机内存不够而报错

    在这种情况下有两种解决方案:

       1.重新分配java 虚拟机内存(我没有试验)

       2.POI中还提供了SXSSFWorkbook swb=new SXSSFWorkbook(wb,10000);代码的创建工作,第一个参数是XSSFWorkbook  wb = new XSSFWorkbook ();第二个参数是内存中处理的数据行数,当数据量超过你所设置的数量,会把多的数据保存到磁盘上。

    这里提供一个简单写入excel文件的代码段:

       

    public static void createWorkBook(List<Entity> dataList,String filename) throws IOException { 
            System.out.println("数据数量=="+dataList.size());
        	//创建excel工作簿 
            XSSFWorkbook  wb = new XSSFWorkbook (); 
            SXSSFWorkbook swb=new SXSSFWorkbook(wb,10000);
            //swb.createSheet()
            //创建第一个sheet(页),命名为 new sheet 
            SXSSFSheet sheet = null;
            sheet = (SXSSFSheet) swb.createSheet("myData");
            //Row 行 
            //Cell 方格 
            // Row 和 Cell 都是从0开始计数的 
             
            for(int i=0;i<dataList.size();i++)
            {
            	Entity en=dataList.get(i);
            	// 创建一行,在页sheet上 
            	Row row = sheet.createRow(i); 
                // 在row行上创建一个方格 
                /*org.apache.poi.ss.usermodel.Cell cell =  row.createCell(0); 
                //设置方格的显示 
                cell.setCellValue(1); */
            	//System.out.println(en.getPkg_name());
            	//row.createCell(0).setCellValue("xx");
                row.createCell(0).setCellValue(en.getDate()); 
                // Or do it on one line. 
                row.createCell(1).setCellValue(en.getxxx()); 
                row.createCell(2).setCellValue(en.getxxx()()); 
                row.createCell(3).setCellValue(en.getxxx()());         
                row.createCell(4).setCellValue(en.getxxx()()); 
                ......
    
            }
             
     
            //创建一个文件 命名为workbook.xls 
            FileOutputStream fileOut = new FileOutputStream(filename); 
            // 把上面创建的工作簿输出到文件中 
            swb.write(fileOut); 
            //关闭输出流 
            fileOut.close(); 
            System.out.println("写入完成----");
        }
    

      

  • 相关阅读:
    网页的状态掩码
    分享到JavaScript
    右下角收缩广告
    播放列表的收缩展开
    创建文本节点createTextNode
    创建元素节点createElement
    进栈和出栈
    刚刚上班才回来,今天和你说说hash数组
    关于JS中的定时器!!!
    面向对象(程序员最呆的地方,一切皆是对象)
  • 原文地址:https://www.cnblogs.com/owner/p/4194276.html
Copyright © 2011-2022 走看看