poi导入excel表格 ,老版本excel用HSSFWorkbook 新版本用XSSFWorkbook

Posted super_胡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poi导入excel表格 ,老版本excel用HSSFWorkbook 新版本用XSSFWorkbook相关的知识,希望对你有一定的参考价值。

        File excelFile = new File("v:\\\\工作簿1.xlsx");
        XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(excelFile));
        XSSFSheet sheet = wb.getSheetAt(0);
        System.out.println(sheet.getLastRowNum());


        for (Row row : sheet) {
            System.out.println("-------");
            if (row.getCell(0).toString() == null)
                break;
            stringRedisTemplate.opsForValue().set(row.getCell(0).toString(),"0"+row.getCell(1).toString());
        }

java poi Excel大数据量导入怎么提高速度

记得有个属性,

POI3.8的SXSSF包是XSSF的一个扩展版本,支持流处理,在生成大数据量的电子表格且堆空间有限时使用。SXSSF通过限制内存中可访问的记录行数来实现其低内存利用,当达到限定值时,新一行数据的加入会引起老一行的数据刷新到硬盘。
比如内存中限制行数为100,当行号到达101时,行号为0的记录刷新到硬盘并从内存中删除,当行号到达102时,行号为1的记录刷新到硬盘,并从内存中删除,以此类推。
rowAccessWindowSize代表指定的内存中缓存记录数,默认为100,此值可以通过
new SXSSFWorkbook(int rowAccessWindowSize)或SXSSFSheet.setRandomAccessWindowSize(int windowSize)来设置。
参考技术A 这个量太大,确实没法子

~~~~~~

最近在利用poi往excel中写入大量数据时,发现excel2003最多只支持65535条,大量数据时容易造成oom,上网查了一下api,发现目前对于2003,每个sheet最多支持65535条,若数据量远超65535,建议分sheet处理,而poi3.8之后,出现了SXSSFWorkbook,可以支持大数据量的写入excel操作,但是目前只支持excel2007

HSSF是POI工程对Excel 97(-2007)文件操作的纯Java实现
XSSF是POI工程对Excel 2007 OOXML (.xlsx)文件操作的纯Java实现

从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的API----SXSSF

SXSSF通过一个滑动窗口来限制访问Row的数量从而达到低内存占用的目录,XSSF可以访问所有行。旧的行数据不再出现在滑动窗口中并变得无法访问,与此同时写到磁盘上。
在自动刷新的模式下,可以指定窗口中访问Row的数量,从而在内存中保持一定数量的Row。当达到这一数量时,在窗口中产生新的Row数据,并将低索引的数据从窗口中移动到磁盘中。
或者,滑动窗口的行数可以设定成自动增长的。它可以根据需要周期的根据一次明确的flushRow(int keepRows)调用来进行修改。

以上是关于poi导入excel表格 ,老版本excel用HSSFWorkbook 新版本用XSSFWorkbook的主要内容,如果未能解决你的问题,请参考以下文章

怎么使用java Poi解决导入excel表格大数据量时的内存溢出问

java 写excel 文件的问题,写完后 就把原来的内容清除了

POI 实现导入Excel 导入问题

java如何导出excel表格,如果用poi,java代码如何实现.,求代码!!!

用java的poi类读取一个excel表格的内容后再写入到一个新excel表格中的完整代码

POI实现Excel导入导出