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文件获取大小记录
收藏poi 使用模板创建一个XSSFWorkbook,为啥取不到row对象