]> source.dussan.org Git - poi.git/commitdiff
bug 59796: XSSFTable#getRowCount off-by-one error
authorJaven O'Neal <onealj@apache.org>
Mon, 4 Jul 2016 19:09:10 +0000 (19:09 +0000)
committerJaven O'Neal <onealj@apache.org>
Mon, 4 Jul 2016 19:09:10 +0000 (19:09 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1751373 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java

index acf9ef69d46fab75b5cdda88eeedea08deff817b..d832f5bea28d8def88672c37d1b3902b753285d3 100644 (file)
@@ -324,8 +324,9 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
 
     
     /**
-     *  @return the total number of rows in the selection. (Note: in this version autofiltering is ignored)
-     *
+     * @return the total number of rows in the selection. (Note: in this version autofiltering is ignored)
+     * Returns <code>0</code> if the start or end cell references are not set.
+     * 
      * Does not track updates to underlying changes to CTTable
      * To synchronize with changes to the underlying CTTable,
      * call {@link #updateReferences()}.
@@ -334,10 +335,9 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
         CellReference from = getStartCellReference();
         CellReference to = getEndCellReference();
         
-        int rowCount = -1;
+        int rowCount = 0;
         if (from!=null && to!=null) {
-            // FIXME: shouldn't this be to-from+1?
-            rowCount = to.getRow()-from.getRow();
+            rowCount = to.getRow() - from.getRow() + 1;
         }
         return rowCount;
     }
index 38edcbf6a5d4306cb37364e6f42cf05f814617d7..69b412a51f082ad67ab836dedc45ae035dcc53d1 100644 (file)
@@ -267,4 +267,24 @@ public final class TestXSSFTable {
         assertEquals(new CellReference("M3"), table.getEndCellReference());
 
     }
+
+    @Test
+    public void getRowCount() {
+        XSSFWorkbook wb = new XSSFWorkbook();
+        XSSFSheet sh = wb.createSheet();
+        XSSFTable table = sh.createTable();
+        CTTable ctTable = table.getCTTable();
+
+        assertEquals(0, table.getRowCount());
+
+        ctTable.setRef("B2:B2");
+        // update cell references to clear the cache
+        table.updateReferences();
+        assertEquals(1, table.getRowCount());
+
+        ctTable.setRef("B2:B12");
+        // update cell references to clear the cache
+        table.updateReferences();
+        assertEquals(11, table.getRowCount());
+    }
 }