diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index dc160de51..0bd2ac472 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 47069 - Fixed HSSFSheet#getFirstRowNum and HSSFSheet#getLastRowNum to return correct values after removal of all rows 47278 - Fixed XSSFCell to avoid generating xsi:nil entries in shared string table 47206 - Fixed XSSFCell to properly read inline strings 47250 - Fixed FontRecord to expect unicode flags even when name length is zero diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index 64a5bc190..0067a6bb8 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -253,7 +253,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { */ private int findLastRow(int lastrow) { if (lastrow < 1) { - return -1; + return 0; } int rownum = lastrow - 1; HSSFRow r = getRow(rownum); @@ -262,7 +262,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { r = getRow(--rownum); } if (r == null) { - return -1; + return 0; } return rownum; } @@ -282,7 +282,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { } if (rownum > getLastRowNum()) - return -1; + return 0; return rownum; } @@ -300,11 +300,12 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { { _sheet.addRow(row.getRowRecord()); } - if (row.getRowNum() > getLastRowNum()) + boolean firstRow = _rows.size() == 1; + if (row.getRowNum() > getLastRowNum() || firstRow) { _lastrow = row.getRowNum(); } - if (row.getRowNum() < getFirstRowNum()) + if (row.getRowNum() < getFirstRowNum() || firstRow) { _firstrow = row.getRowNum(); } diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java index 9c51656dd..98284df7c 100755 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java @@ -79,21 +79,32 @@ public abstract class BaseTestSheet extends TestCase { Workbook workbook = getTestDataProvider().createWorkbook(); Sheet sheet1 = workbook.createSheet(); assertEquals(0, sheet1.getPhysicalNumberOfRows()); + assertEquals(0, sheet1.getFirstRowNum()); + assertEquals(0, sheet1.getLastRowNum()); Row row0 = sheet1.createRow(0); assertEquals(1, sheet1.getPhysicalNumberOfRows()); + assertEquals(0, sheet1.getFirstRowNum()); + assertEquals(0, sheet1.getLastRowNum()); sheet1.removeRow(row0); assertEquals(0, sheet1.getPhysicalNumberOfRows()); + assertEquals(0, sheet1.getFirstRowNum()); + assertEquals(0, sheet1.getLastRowNum()); Row row1 = sheet1.createRow(1); Row row2 = sheet1.createRow(2); assertEquals(2, sheet1.getPhysicalNumberOfRows()); + assertEquals(1, sheet1.getFirstRowNum()); + assertEquals(2, sheet1.getLastRowNum()); assertNotNull(sheet1.getRow(1)); assertNotNull(sheet1.getRow(2)); sheet1.removeRow(row2); assertNotNull(sheet1.getRow(1)); assertNull(sheet1.getRow(2)); + assertEquals(1, sheet1.getPhysicalNumberOfRows()); + assertEquals(1, sheet1.getFirstRowNum()); + assertEquals(1, sheet1.getLastRowNum()); Row row3 = sheet1.createRow(3); Sheet sheet2 = workbook.createSheet();