Implemented row bounds. Will raise an IndexOutOfBoundsException if the excel limits are not observerd.
Interestingly column bounds were previouly implemented, but row bounds were not. Anyhow this fixes bug 15102 git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353608 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
6ab6d0a295
commit
dd6a35b1bd
@ -35,6 +35,12 @@ public class RowRecord
|
|||||||
implements Comparable
|
implements Comparable
|
||||||
{
|
{
|
||||||
public final static short sid = 0x208;
|
public final static short sid = 0x208;
|
||||||
|
|
||||||
|
/** The maximum row number that excel can handle (zero bazed) ie 65536 rows is
|
||||||
|
* max number of rows.
|
||||||
|
*/
|
||||||
|
public final static int MAX_ROW_NUMBER = 65535;
|
||||||
|
|
||||||
//private short field_1_row_number;
|
//private short field_1_row_number;
|
||||||
private int field_1_row_number;
|
private int field_1_row_number;
|
||||||
private short field_2_first_col;
|
private short field_2_first_col;
|
||||||
|
@ -84,7 +84,6 @@ public class HSSFRow
|
|||||||
//protected HSSFRow(Workbook book, Sheet sheet, short rowNum)
|
//protected HSSFRow(Workbook book, Sheet sheet, short rowNum)
|
||||||
protected HSSFRow(Workbook book, Sheet sheet, int rowNum)
|
protected HSSFRow(Workbook book, Sheet sheet, int rowNum)
|
||||||
{
|
{
|
||||||
this.rowNum = rowNum;
|
|
||||||
cells = new HashMap(10); // new ArrayList(INITIAL_CAPACITY);
|
cells = new HashMap(10); // new ArrayList(INITIAL_CAPACITY);
|
||||||
this.book = book;
|
this.book = book;
|
||||||
this.sheet = sheet;
|
this.sheet = sheet;
|
||||||
@ -94,7 +93,6 @@ public class HSSFRow
|
|||||||
row.setLastCol((short) -1);
|
row.setLastCol((short) -1);
|
||||||
row.setFirstCol((short) -1);
|
row.setFirstCol((short) -1);
|
||||||
|
|
||||||
// row.setRowNumber(rowNum);
|
|
||||||
setRowNum(rowNum);
|
setRowNum(rowNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,17 +108,12 @@ public class HSSFRow
|
|||||||
|
|
||||||
protected HSSFRow(Workbook book, Sheet sheet, RowRecord record)
|
protected HSSFRow(Workbook book, Sheet sheet, RowRecord record)
|
||||||
{
|
{
|
||||||
//this.rowNum = rowNum;
|
|
||||||
cells = new HashMap(); // ArrayList(INITIAL_CAPACITY);
|
cells = new HashMap(); // ArrayList(INITIAL_CAPACITY);
|
||||||
this.book = book;
|
this.book = book;
|
||||||
this.sheet = sheet;
|
this.sheet = sheet;
|
||||||
row = record;
|
row = record;
|
||||||
|
|
||||||
// row.setHeight(record.getHeight());
|
|
||||||
// row.setRowNumber(rowNum);
|
|
||||||
setRowNum(record.getRowNumber());
|
setRowNum(record.getRowNumber());
|
||||||
|
|
||||||
// addColumns(book, sheet, record);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -206,11 +199,14 @@ public class HSSFRow
|
|||||||
/**
|
/**
|
||||||
* set the row number of this row.
|
* set the row number of this row.
|
||||||
* @param rowNum the row number (0-based)
|
* @param rowNum the row number (0-based)
|
||||||
|
* @throws IndexOutOfBoundsException if the row number is not within the range 0-65535.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//public void setRowNum(short rowNum)
|
//public void setRowNum(short rowNum)
|
||||||
public void setRowNum(int rowNum)
|
public void setRowNum(int rowNum)
|
||||||
{
|
{
|
||||||
|
if ((rowNum < 0) || (rowNum > RowRecord.MAX_ROW_NUMBER))
|
||||||
|
throw new IndexOutOfBoundsException("Row number must be between 0 and "+RowRecord.MAX_ROW_NUMBER+", was <"+rowNum+">");
|
||||||
this.rowNum = rowNum;
|
this.rowNum = rowNum;
|
||||||
if (row != null)
|
if (row != null)
|
||||||
{
|
{
|
||||||
|
@ -242,10 +242,12 @@ public class HSSFSheet
|
|||||||
int rownum = lastrow - 1;
|
int rownum = lastrow - 1;
|
||||||
HSSFRow r = getRow(rownum);
|
HSSFRow r = getRow(rownum);
|
||||||
|
|
||||||
while (r == null && rownum >= 0)
|
while (r == null && rownum > 0)
|
||||||
{
|
{
|
||||||
r = getRow(--rownum);
|
r = getRow(--rownum);
|
||||||
}
|
}
|
||||||
|
if (r == null)
|
||||||
|
return -1;
|
||||||
return rownum;
|
return rownum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,4 +99,32 @@ public class TestHSSFRow
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testRowBounds()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
HSSFWorkbook workbook = new HSSFWorkbook();
|
||||||
|
HSSFSheet sheet = workbook.createSheet();
|
||||||
|
//Test low row bound
|
||||||
|
HSSFRow row = sheet.createRow( (short) 0);
|
||||||
|
//Test low row bound exception
|
||||||
|
boolean caughtException = false;
|
||||||
|
try {
|
||||||
|
row = sheet.createRow(-1);
|
||||||
|
} catch (IndexOutOfBoundsException ex) {
|
||||||
|
caughtException = true;
|
||||||
|
}
|
||||||
|
assertTrue(caughtException);
|
||||||
|
//Test high row bound
|
||||||
|
row = sheet.createRow(65535);
|
||||||
|
//Test high row bound exception
|
||||||
|
caughtException = false;
|
||||||
|
try {
|
||||||
|
row = sheet.createRow(65536);
|
||||||
|
} catch (IndexOutOfBoundsException ex) {
|
||||||
|
caughtException = true;
|
||||||
|
}
|
||||||
|
assertTrue(caughtException);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user