]> source.dussan.org Git - poi.git/commitdiff
The table auto-filter range should not include table footer rows, while the table...
authorGreg Woolsey <gwoolsey@apache.org>
Fri, 23 Feb 2018 23:37:04 +0000 (23:37 +0000)
committerGreg Woolsey <gwoolsey@apache.org>
Fri, 23 Feb 2018 23:37:04 +0000 (23:37 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1825182 13f79535-47bb-0310-9956-ffa450edef68

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

index 5398c88d4be20cdedcaefa3e5b91d5f497b44c94..5d84662405c277b38a784f04d74471cda0b8739d 100644 (file)
@@ -350,6 +350,7 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
      * Updates the reference for the cells of the table
      * (see Open Office XML Part 4: chapter 3.5.1.2, attribute ref)
      * and synchronizes any changes
+     * @param refs table range
      * 
      * @since 3.17 beta 1
      */
@@ -363,7 +364,18 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
         // Update
         ctTable.setRef(ref);
         if (ctTable.isSetAutoFilter()) {
-            ctTable.getAutoFilter().setRef(ref);
+            String filterRef;
+            int totalsRowCount = getTotalsRowCount();
+            if (totalsRowCount == 0) {
+                filterRef = ref;
+            } else {
+                final CellReference start = new CellReference(refs.getFirstCell().getRow(), refs.getFirstCell().getCol());
+                // account for footer row(s) in auto-filter range, which doesn't include footers
+                final CellReference end = new CellReference(refs.getLastCell().getRow() - totalsRowCount, refs.getLastCell().getCol());
+                // this won't have sheet references because we built the cell references without them
+                filterRef = new AreaReference(start, end, SpreadsheetVersion.EXCEL2007).formatAsString();
+            }
+            ctTable.getAutoFilter().setRef(filterRef);
         }
         
         // Have everything recomputed
@@ -476,7 +488,7 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
 
         if (row != null && row.getCTRow().validate()) {
             int cellnum = firstHeaderColumn;
-            for (CTTableColumn col : getCTTable().getTableColumns().getTableColumnArray()) {
+            for (CTTableColumn col : getCTTable().getTableColumns().getTableColumnList()) {
                 XSSFCell cell = row.getCell(cellnum);
                 if (cell != null) {
                     col.setName(formatter.formatCellValue(cell));