SXSSFWorkbook 无法获取row

Posted bluss-yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SXSSFWorkbook 无法获取row相关的知识,希望对你有一定的参考价值。

https://bbs.csdn.net/topics/390393096?page=1

 

这几天,我也遇到了这个问题,东查西查,终于解决。

首先要搞清楚HSSF、XSSF、SXSSF
HSSF是POI工程对Excel 97(-2007)文件操作的纯Java实现
XSSF是POI工程对Excel 2007 OOXML (.xlsx)文件操作的纯Java实现
从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的API----SXSSF

在POI的API文档中,对SXSSF的说明如下:

public SXSSFWorkbook(XSSFWorkbook workbook)

Construct a workbook from a template.

There are three use-cases to use SXSSFWorkbook(XSSFWorkbook) :(这部分解释了什么情况下使用SXSSF)

    Append new sheets to existing workbooks. You can open existing workbook from a file or create on the fly with XSSF.
    Append rows to existing sheets. The row number MUST be greater than max(rownum) in the template sheet.
    Use existing workbook as a template and re-use global objects such as cell styles, formats, images, etc.

All three use cases can work in a combination.

What is not supported:

    Access initial cells and rows in the template. After constructing SXSSFWorkbook(XSSFWorkbook) all internal windows are empty and SXSSFSheet@getRow and SXSSFRow#getCell return null.
(这句解释了为什么是Null)
    Override existing cells and rows. The API silently allows that but the output file is invalid and Excel cannot read it.

Parameters:
    workbook - the template workbook

 

上面说是不能获取row,但是下面还有一个方法,可以指定flush大小。sheet copy之后也可以getrow()

SXSSFWorkbook(int rowAccessWindowSize)

Construct an empty workbook and specify the window for row access.

    SXSSFWorkbook targetbook1 = new SXSSFWorkbook(1000);

XSSFWorkbook tempWorkbook = new XSSFWorkbook(fis);

tempWorkbook----》sheet copy到 targetbook1    之后就可以用targetbook1.getSheetAt(0).getRow 了。

 

以上是关于SXSSFWorkbook 无法获取row的主要内容,如果未能解决你的问题,请参考以下文章

无法在java中读取使用SXSSFWorkbook编写的文件

HSSFWorkbook-SXSSFWorkbook导出excel文件获取大小记录

NPOI的一些坑

收藏poi 使用模板创建一个XSSFWorkbook,为啥取不到row对象

poi的XSSFWorkbook转SXSSFWorkbook发现的问题

sxssfworkbook在哪个jar包中