zoukankan      html  css  js  c++  java
  • POI 生成excel(大数据量) SXSSF

    使用POI 的SXSSF (Streaming Usermodel API)生成较大的excel,同时开启压缩

     1 import junit.framework.Assert;
     2 import org.apache.poi.ss.usermodel.Cell;
     3 import org.apache.poi.ss.usermodel.Row;
     4 import org.apache.poi.ss.usermodel.Sheet;
     5 import org.apache.poi.ss.usermodel.Workbook;
     6 import org.apache.poi.ss.util.CellReference;
     7 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
     8 
     9     public static void main(String[] args) throws Throwable {
    10         SXSSFWorkbook wb = new SXSSFWorkbook(100); // keep 100 rows in memory, exceeding rows will be flushed to disk
    11         Sheet sh = wb.createSheet();
    12         for(int rownum = 0; rownum < 1000; rownum++){
    13             Row row = sh.createRow(rownum);
    14             for(int cellnum = 0; cellnum < 10; cellnum++){
    15                 Cell cell = row.createCell(cellnum);
    16                 String address = new CellReference(cell).formatAsString();
    17                 cell.setCellValue(address);
    18             }
    19 
    20         }
    21 
    22         // Rows with rownum < 900 are flushed and not accessible
    23         for(int rownum = 0; rownum < 900; rownum++){
    24           Assert.assertNull(sh.getRow(rownum));
    25         }
    26 
    27         // ther last 100 rows are still in memory
    28         for(int rownum = 900; rownum < 1000; rownum++){
    29             Assert.assertNotNull(sh.getRow(rownum));
    30         }
    31         
    32         FileOutputStream out = new FileOutputStream("/temp/sxssf.xlsx");
    33         wb.write(out);
    34         out.close();
    35 
    36         // dispose of temporary files backing this workbook on disk
    37         wb.dispose();
    38     }

    遇到的问题:

    错误是NPE错误,类似如下,原因是缺少字体或者环境变量未设置,需要安装"ttf-dejavu"字体,具体可以参考:

    https://stackoverflow.com/questions/30626136/cannot-load-font-in-jre-8

    https://www.jianshu.com/p/c05b5fc71bd0

     1 java.lang.NullPointerException
     2     at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
     3     at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
     4     at sun.awt.FontConfiguration.init(FontConfiguration.java:107)
     5     at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)
     6     at sun.font.SunFontManager$2.run(SunFontManager.java:431)
     7     at java.security.AccessController.doPrivileged(Native Method)
     8     at sun.font.SunFontManager.<init>(SunFontManager.java:376)
     9     at sun.awt.FcFontManager.<init>(FcFontManager.java:35)
    10     at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
    11     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    12     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    13     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    14     at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    15     at java.lang.Class.newInstance(Class.java:442)
    16     at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
    17     at java.security.AccessController.doPrivileged(Native Method)
    18     at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
    19     at java.awt.Font.getFont2D(Font.java:495)
    20     at java.awt.Font.canDisplayUpTo(Font.java:2080)
    21     at java.awt.font.TextLayout.singleFont(TextLayout.java:470)
    22     at java.awt.font.TextLayout.<init>(TextLayout.java:531)
    23     at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:275)
    24     at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117)
    25     at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:79)
    26     at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:656)
    27     at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:677)
    28     at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:83)

    还有一种,easyexcel,没用过,可以参考https://github.com/alibaba/easyexcel

  • 相关阅读:
    用JavaScript玩转计算机图形学(二)基本光源
    两条像面试用的编程问题,和我的囧事
    混合语言的游戏开发系统架构
    为你详解Linux安装GCC方法
    Windows Phone 7常用资源大集合
    html5之Web Workers示例
    MFC/Win32中使用GDI+
    linux yum命令详解
    Linux development tools
    HTML5之Canvas标签简要学习
  • 原文地址:https://www.cnblogs.com/forward/p/10218471.html
Copyright © 2011-2022 走看看