You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2014/01/01 23:15:45 UTC

svn commit: r1554688 - in /poi/trunk/src: java/org/apache/poi/hssf/usermodel/ ooxml/java/org/apache/poi/xssf/usermodel/ ooxml/testcases/org/apache/poi/xssf/usermodel/ testcases/org/apache/poi/hssf/usermodel/ testcases/org/apache/poi/ss/usermodel/

Author: centic
Date: Wed Jan  1 22:15:44 2014
New Revision: 1554688

URL: http://svn.apache.org/r1554688
Log:
Bug 55723: Make HSSFSheet.setAutoFilter() behave equal to XSSF, also make XSSF work when setAutoFilter is called multiple times

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
    poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java?rev=1554688&r1=1554687&r2=1554688&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java Wed Jan  1 22:15:44 2014
@@ -2056,8 +2056,6 @@ public final class HSSFSheet implements 
     }
 
     public HSSFAutoFilter setAutoFilter(CellRangeAddress range) {
-
-
         InternalWorkbook workbook = _workbook.getWorkbook();
         int sheetIndex = _workbook.getSheetIndex(this);
 
@@ -2067,8 +2065,15 @@ public final class HSSFSheet implements 
             name = workbook.createBuiltInName(NameRecord.BUILTIN_FILTER_DB, sheetIndex + 1);
         }
 
+        int firstRow = range.getFirstRow();
+        
+        // if row was not given when constructing the range...
+        if(firstRow == -1) {
+            firstRow = 0;
+        }
+
         // The built-in name must consist of a single Area3d Ptg.
-        Area3DPtg ptg = new Area3DPtg(range.getFirstRow(), range.getLastRow(),
+        Area3DPtg ptg = new Area3DPtg(firstRow, range.getLastRow(),
                 range.getFirstColumn(), range.getLastColumn(),
                 false, false, false, false, sheetIndex);
         name.setNameDefinition(new Ptg[]{ptg});
@@ -2084,7 +2089,7 @@ public final class HSSFSheet implements 
         HSSFPatriarch p = createDrawingPatriarch();
         for (int col = range.getFirstColumn(); col <= range.getLastColumn(); col++) {
             p.createComboBox(new HSSFClientAnchor(0, 0, 0, 0,
-                    (short) col, range.getFirstRow(), (short) (col + 1), range.getFirstRow() + 1));
+                    (short) col, firstRow, (short) (col + 1), firstRow + 1));
         }
 
         return new HSSFAutoFilter(this);

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java?rev=1554688&r1=1554687&r2=1554688&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java Wed Jan  1 22:15:44 2014
@@ -3194,12 +3194,13 @@ public class XSSFSheet extends POIXMLDoc
         XSSFName name = wb.getBuiltInName(XSSFName.BUILTIN_FILTER_DB, sheetIndex);
         if (name == null) {
             name = wb.createBuiltInName(XSSFName.BUILTIN_FILTER_DB, sheetIndex);
-            name.getCTName().setHidden(true);
-            CellReference r1 = new CellReference(getSheetName(), range.getFirstRow(), range.getFirstColumn(), true, true);
-            CellReference r2 = new CellReference(null, range.getLastRow(), range.getLastColumn(), true, true);
-            String fmla = r1.formatAsString() + ":" + r2.formatAsString();
-            name.setRefersToFormula(fmla);
         }
+        
+        name.getCTName().setHidden(true);
+        CellReference r1 = new CellReference(getSheetName(), range.getFirstRow(), range.getFirstColumn(), true, true);
+        CellReference r2 = new CellReference(null, range.getLastRow(), range.getLastColumn(), true, true);
+        String fmla = r1.formatAsString() + ":" + r2.formatAsString();
+        name.setRefersToFormula(fmla);
 
         return new XSSFAutoFilter(this);
     }

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java?rev=1554688&r1=1554687&r2=1554688&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java Wed Jan  1 22:15:44 2014
@@ -21,6 +21,7 @@ import java.util.List;
 
 import org.apache.poi.hssf.HSSFTestDataSamples;
 import org.apache.poi.hssf.record.PasswordRecord;
+import org.apache.poi.ss.usermodel.AutoFilter;
 import org.apache.poi.ss.usermodel.BaseTestSheet;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CreationHelper;
@@ -1228,4 +1229,30 @@ public final class TestXSSFSheet extends
         assertEquals("Sheet should contain 8 tables", 8, tables.size());
         assertNotNull("Sheet should contain a comments table", sheet.getCommentsTable(false));
     }
+
+    public void testBug55723b(){
+        XSSFWorkbook wb = new XSSFWorkbook();
+        Sheet sheet = wb.createSheet();
+
+        // stored with a special name
+        assertNull(wb.getBuiltInName(XSSFName.BUILTIN_FILTER_DB, 0));
+
+        CellRangeAddress range = CellRangeAddress.valueOf("A:B");
+        AutoFilter filter = sheet.setAutoFilter(range);
+        assertNotNull(filter);
+        
+        // stored with a special name
+        XSSFName name = wb.getBuiltInName(XSSFName.BUILTIN_FILTER_DB, 0);
+        assertNotNull(name);
+        assertEquals("Sheet0!$A:$B", name.getRefersToFormula());
+        
+        range = CellRangeAddress.valueOf("B:C");
+        filter = sheet.setAutoFilter(range);
+        assertNotNull(filter);
+        
+        // stored with a special name
+        name = wb.getBuiltInName(XSSFName.BUILTIN_FILTER_DB, 0);
+        assertNotNull(name);
+        assertEquals("Sheet0!$B:$C", name.getRefersToFormula());
+    }
 }

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java?rev=1554688&r1=1554687&r2=1554688&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java Wed Jan  1 22:15:44 2014
@@ -35,6 +35,7 @@ import org.apache.poi.hssf.record.aggreg
 import org.apache.poi.hssf.usermodel.RecordInspector.RecordCollector;
 import org.apache.poi.ss.formula.ptg.Area3DPtg;
 import org.apache.poi.ss.formula.ptg.Ptg;
+import org.apache.poi.ss.usermodel.AutoFilter;
 import org.apache.poi.ss.usermodel.BaseTestSheet;
 import org.apache.poi.ss.usermodel.DataValidation;
 import org.apache.poi.ss.usermodel.DataValidationConstraint;
@@ -1066,4 +1067,20 @@ public final class TestHSSFSheet extends
         sheet.dumpDrawingRecords(true);*/
         assertNull(sheet.getDrawingEscherAggregate());
     }
+
+    public void testBug55723b() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        Sheet sheet = wb.createSheet();
+
+        // stored with a special name
+        assertNull(wb.getWorkbook().getSpecificBuiltinRecord(NameRecord.BUILTIN_FILTER_DB, 1));
+
+        CellRangeAddress range = CellRangeAddress.valueOf("A:B");
+        AutoFilter filter = sheet.setAutoFilter(range);
+        assertNotNull(filter);
+        
+        // stored with a special name
+        NameRecord record = wb.getWorkbook().getSpecificBuiltinRecord(NameRecord.BUILTIN_FILTER_DB, 1);
+        assertNotNull(record);
+    }
 }

Modified: poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java?rev=1554688&r1=1554687&r2=1554688&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java Wed Jan  1 22:15:44 2014
@@ -21,6 +21,7 @@ import java.util.Iterator;
 
 import junit.framework.TestCase;
 
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.hssf.util.PaneInformation;
 import org.apache.poi.ss.ITestDataProvider;
 import org.apache.poi.ss.SpreadsheetVersion;
@@ -800,4 +801,39 @@ public abstract class BaseTestSheet exte
         Sheet sheet = wb.createSheet();
         sheet.showInPane(2, 3);
     }
+
+
+    public void testBug55723(){
+        Workbook wb = _testDataProvider.createWorkbook();
+        Sheet sheet = wb.createSheet();
+
+        CellRangeAddress range = CellRangeAddress.valueOf("A:B");
+        AutoFilter filter = sheet.setAutoFilter(range);
+        assertNotNull(filter);
+        // there seems to be currently no generic way to check the setting...
+
+        range = CellRangeAddress.valueOf("B:C");
+        filter = sheet.setAutoFilter(range);
+        assertNotNull(filter);
+        // there seems to be currently no generic way to check the setting...
+    }
+
+    public void testBug55723_Rows() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        Sheet sheet = wb.createSheet();
+
+        CellRangeAddress range = CellRangeAddress.valueOf("A4:B55000");
+        AutoFilter filter = sheet.setAutoFilter(range);
+        assertNotNull(filter);
+    }
+
+
+    public void testBug55723d_RowsOver65k() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        Sheet sheet = wb.createSheet();
+
+        CellRangeAddress range = CellRangeAddress.valueOf("A4:B75000");
+        AutoFilter filter = sheet.setAutoFilter(range);
+        assertNotNull(filter);
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org