fixed bug 41761: NPE when serializing a workbook with empty rows
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@520416 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e3305a7043
commit
bfc32c3190
@ -783,7 +783,7 @@ public class Sheet implements Model
|
|||||||
int dbCellOffset = 0;
|
int dbCellOffset = 0;
|
||||||
for (int block=0;block<blockCount;block++) {
|
for (int block=0;block<blockCount;block++) {
|
||||||
rowBlockOffset += rows.getRowBlockSize(block);
|
rowBlockOffset += rows.getRowBlockSize(block);
|
||||||
cellBlockOffset += cells.getRowCellBlockSize(rows.getStartRowNumberForBlock(block),
|
cellBlockOffset += null == cells ? 0 : cells.getRowCellBlockSize(rows.getStartRowNumberForBlock(block),
|
||||||
rows.getEndRowNumberForBlock(block));
|
rows.getEndRowNumberForBlock(block));
|
||||||
//Note: The offsets are relative to the Workbook BOF. Assume that this is
|
//Note: The offsets are relative to the Workbook BOF. Assume that this is
|
||||||
//0 for now.....
|
//0 for now.....
|
||||||
|
@ -213,7 +213,7 @@ public class RowRecordsAggregate
|
|||||||
//Note: Cell references start from the second row...
|
//Note: Cell references start from the second row...
|
||||||
int cellRefOffset = (rowBlockSize-20);
|
int cellRefOffset = (rowBlockSize-20);
|
||||||
for (int row=startRowNumber;row<=endRowNumber;row++) {
|
for (int row=startRowNumber;row<=endRowNumber;row++) {
|
||||||
if (cells.rowHasCells(row)) {
|
if (null != cells && cells.rowHasCells(row)) {
|
||||||
final int rowCellSize = cells.serializeCellRow(row, pos, data);
|
final int rowCellSize = cells.serializeCellRow(row, pos, data);
|
||||||
pos += rowCellSize;
|
pos += rowCellSize;
|
||||||
//Add the offset to the first cell for the row into the DBCellRecord.
|
//Add the offset to the first cell for the row into the DBCellRecord.
|
||||||
|
@ -19,9 +19,7 @@
|
|||||||
|
|
||||||
package org.apache.poi.hssf.usermodel;
|
package org.apache.poi.hssf.usermodel;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.*;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
@ -483,6 +481,41 @@ public class TestHSSFSheet
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void testAddEmptyRow() throws Exception {
|
||||||
|
//try to add 5 empty rows to a new sheet
|
||||||
|
HSSFWorkbook workbook = new HSSFWorkbook();
|
||||||
|
HSSFSheet sheet = workbook.createSheet();
|
||||||
|
for (int i = 0; i < 5; i++) sheet.createRow(i);
|
||||||
|
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
workbook.write(out);
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
workbook = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
|
||||||
|
assertTrue("No Exceptions while reading file", true);
|
||||||
|
|
||||||
|
//try adding empty rows in an existing worksheet
|
||||||
|
String cwd = System.getProperty("HSSF.testdata.path");
|
||||||
|
FileInputStream in = new FileInputStream(new File(cwd, "Simple.xls"));
|
||||||
|
workbook = new HSSFWorkbook(in);
|
||||||
|
in.close();
|
||||||
|
assertTrue("No Exceptions while reading file", true);
|
||||||
|
|
||||||
|
sheet = workbook.getSheetAt(0);
|
||||||
|
for (int i = 3; i < 10; i++) sheet.createRow(i);
|
||||||
|
|
||||||
|
out = new ByteArrayOutputStream();
|
||||||
|
workbook.write(out);
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
workbook = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
|
||||||
|
assertTrue("No Exceptions while reading file", true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(java.lang.String[] args) {
|
public static void main(java.lang.String[] args) {
|
||||||
junit.textui.TestRunner.run(TestHSSFSheet.class);
|
junit.textui.TestRunner.run(TestHSSFSheet.class);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user