sheet.getRow(0)获取的row为null?

new SXSSFWorkbook(new XSSFWorkbook(inputStream));
这种方式创建的Workbook,使用sheet.getRow(0)获取的row为null;

原因是new SXSSFWorkbook(new XSSFWorkbook(inputStream))的时候,SXSSFWorkbook对象内部会维护一个HashMap(反编译后的名称为_xFromSxHash);

当使用workBok.getSheetAt(0)的时候,其实是从_xFromSxHash中获取新创建的Sheet对象;从而导致sheet.getRow(0)获取的row为null。

Workbook workBook = new SXSSFWorkbook(new XSSFWorkbook(inputStream));
Sheet sheet = workBook.getSheetAt(0);
Row row = sheet.getRow(0);

改为如下取值即可:

Workbook workBook = new SXSSFWorkbook(new XSSFWorkbook(inputStream));
Sheet sheet;
if (workBook instanceof SXSSFWorkbook) {
   SXSSFWorkbook sxssfWorkbook = (SXSSFWorkbook) workBook;
   sheet = sxssfWorkbook.getXSSFWorkbook().getSheetAt(sheetIndex);
} else {
   sheet = workBook.getSheetAt(sheetIndex);
}
Row row = sheet.getRow(0);

版权声明:本文为weixin_42600999原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。