]> source.dussan.org Git - poi.git/commitdiff
Avoid FormulaParseException in XSSFWorkbook.setRepeatingRowsAndColumns when removing...
authorYegor Kozlov <yegor@apache.org>
Wed, 5 Aug 2009 17:54:56 +0000 (17:54 +0000)
committerYegor Kozlov <yegor@apache.org>
Wed, 5 Aug 2009 17:54:56 +0000 (17:54 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@801339 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java

index af0d90c143a211df8ea2a46278248dc7824f6ed3..e38256b67fa99e5026ac91f2b06f35a1c26eb122 100644 (file)
@@ -33,6 +33,7 @@
 
     <changes>
         <release version="3.5-beta7" date="2009-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">47620 - Avoid FormulaParseException in XSSFWorkbook.setRepeatingRowsAndColumns when removing repeated rows and columns</action>
            <action dev="POI-DEVELOPERS" type="fix">47606 - Fixed  XSSFCell to correctly parse column indexes greater than 702 (ZZ)</action>
            <action dev="POI-DEVELOPERS" type="fix">47598 - Improved formula evaluator number comparison</action>
            <action dev="POI-DEVELOPERS" type="fix">47571 - Fixed XWPFWordExtractor to extract inserted/deleted text</action>
index e3961a51d8851e675e6784155b89685436c0fe4e..d08cbc5eea76225ae2c36d95a7f65d594065b38c 100644 (file)
@@ -937,17 +937,18 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
         boolean removingRange = startColumn == -1 && endColumn == -1 && startRow == -1 && endRow == -1;
 
         XSSFName name = getBuiltInName(XSSFName.BUILTIN_PRINT_TITLE, sheetIndex);
-        if (removingRange && name != null) {
-            namedRanges.remove(name);
+        if (removingRange) {
+            if(name != null)namedRanges.remove(name);
             return;
         }
         if (name == null) {
             name = createBuiltInName(XSSFName.BUILTIN_PRINT_TITLE, sheetIndex);
-            String reference = getReferenceBuiltInRecord(name.getSheetName(), startColumn, endColumn, startRow, endRow);
-            name.setRefersToFormula(reference);
             namedRanges.add(name);
         }
 
+        String reference = getReferenceBuiltInRecord(name.getSheetName(), startColumn, endColumn, startRow, endRow);
+        name.setRefersToFormula(reference);
+
         XSSFPrintSetup printSetup = sheet.getPrintSetup();
         printSetup.setValidSettings(false);
     }
@@ -959,17 +960,26 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
 
         String escapedName = SheetNameFormatter.format(sheetName);
 
-        String c = escapedName + "!$" + colRef.getCellRefParts()[2] + ":$" + colRef2.getCellRefParts()[2];
+        String c;
+        if(startC == -1 && endC == -1) c= "";
+        else c = escapedName + "!$" + colRef.getCellRefParts()[2] + ":$" + colRef2.getCellRefParts()[2];
 
         CellReference rowRef = new CellReference(sheetName, startR, 0, true, true);
         CellReference rowRef2 = new CellReference(sheetName, endR, 0, true, true);
 
         String r = "";
-
-        if (!rowRef.getCellRefParts()[1].equals("0") && !rowRef2.getCellRefParts()[1].equals("0")) {
-            r = "," + escapedName + "!$" + rowRef.getCellRefParts()[1] + ":$" + rowRef2.getCellRefParts()[1];
+        if(startR == -1 && endR == -1) r = "";
+        else {
+            if (!rowRef.getCellRefParts()[1].equals("0") && !rowRef2.getCellRefParts()[1].equals("0")) {
+                r = escapedName + "!$" + rowRef.getCellRefParts()[1] + ":$" + rowRef2.getCellRefParts()[1];
+            }
         }
-        return c + r;
+        
+        StringBuffer rng = new StringBuffer();
+        rng.append(c);
+        if(rng.length() > 0 && r.length() > 0) rng.append(',');
+        rng.append(r);
+        return rng.toString();
     }
 
     private static String getReferencePrintArea(String sheetName, int startC, int endC, int startR, int endR) {
index 14bfdc790b68ffc91e3cd193d95cf781e6009034..f2e8ecddc8a014b0b0af43e4b186018aa6975eef 100755 (executable)
@@ -39,6 +39,8 @@ public final class TestXSSFName extends BaseTestNamedRange {
         XSSFWorkbook wb = getTestDataProvider().createWorkbook();
         XSSFSheet sheet = wb.createSheet("First Sheet");
 
+        wb.setRepeatingRowsAndColumns(0, -1, -1, -1, -1);
+
         // set repeating rows and columns twice for the first sheet
         for (int i = 0; i < 2; i++) {
             wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3);
@@ -50,6 +52,20 @@ public final class TestXSSFName extends BaseTestNamedRange {
         assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr1.getNameName());
         assertEquals("'First Sheet'!$A:$A,'First Sheet'!$1:$4", nr1.getRefersToFormula());
 
+        //remove the columns part
+        wb.setRepeatingRowsAndColumns(0, -1, -1, 0, 3);
+        assertEquals("'First Sheet'!$1:$4", nr1.getRefersToFormula());
+
+        //revert
+        wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3);
+
+        //remove the rows part
+        wb.setRepeatingRowsAndColumns(0, 0, 0, -1, -1);
+        assertEquals("'First Sheet'!$A:$A", nr1.getRefersToFormula());
+
+        //revert
+        wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3);
+
         // Save and re-open
         XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);