]> source.dussan.org Git - poi.git/commitdiff
#61700 getForceFormulaRecalculation() returns wrong value
authorGreg Woolsey <gwoolsey@apache.org>
Sun, 31 Mar 2019 01:00:05 +0000 (01:00 +0000)
committerGreg Woolsey <gwoolsey@apache.org>
Sun, 31 Mar 2019 01:00:05 +0000 (01:00 +0000)
changed to use the proper OOXML attribute instead of a hack about calculation engine version ID.  Reporter was right, the behavior was wrong in some cases, but it turns out the fix was a bit more.  See issue for details.

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1856652 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java

index f2c9635303eccb86c06793dce760d15342817b6f..c6c015a4427ee241e06fc19cda6578aa5171e037 100644 (file)
@@ -2221,9 +2221,9 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Date1904Su
     public void setForceFormulaRecalculation(boolean value){
         CTWorkbook ctWorkbook = getCTWorkbook();
         CTCalcPr calcPr = ctWorkbook.isSetCalcPr() ? ctWorkbook.getCalcPr() : ctWorkbook.addNewCalcPr();
-        // when set to 0, will tell Excel that it needs to recalculate all formulas
+        // when set to true, will tell Excel that it needs to recalculate all formulas
         // in the workbook the next time the file is opened.
-        calcPr.setCalcId(0);
+        calcPr.setFullCalcOnLoad(value);
 
         if(value && calcPr.getCalcMode() == STCalcMode.MANUAL) {
             calcPr.setCalcMode(STCalcMode.AUTO);
@@ -2239,7 +2239,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Date1904Su
     public boolean getForceFormulaRecalculation(){
         CTWorkbook ctWorkbook = getCTWorkbook();
         CTCalcPr calcPr = ctWorkbook.getCalcPr();
-        return calcPr != null && calcPr.getCalcId() != 1;
+        return calcPr != null && calcPr.isSetFullCalcOnLoad() && calcPr.getFullCalcOnLoad();
     }
 
 
index 0f394610025f67fea32ccba2d4ad3f2b06a49bd2..295958ee730bfc84c5db56c744247f1078b9fb97 100644 (file)
@@ -489,7 +489,7 @@ public final class TestXSSFWorkbook extends BaseTestXWorkbook {
             CTWorkbook ctWorkbook = wb.getCTWorkbook();
             assertFalse(ctWorkbook.isSetCalcPr());
 
-            wb.setForceFormulaRecalculation(true); // resets the EngineId flag to zero
+            wb.setForceFormulaRecalculation(true);
 
             CTCalcPr calcPr = ctWorkbook.getCalcPr();
             assertNotNull(calcPr);
@@ -498,8 +498,7 @@ public final class TestXSSFWorkbook extends BaseTestXWorkbook {
             calcPr.setCalcId(100);
             assertTrue(wb.getForceFormulaRecalculation());
 
-            wb.setForceFormulaRecalculation(true); // resets the EngineId flag to zero
-            assertEquals(0, (int) calcPr.getCalcId());
+            wb.setForceFormulaRecalculation(false);
             assertTrue(wb.getForceFormulaRecalculation());
 
             // calcMode="manual" is unset when forceFormulaRecalculation=true
@@ -1145,8 +1144,7 @@ public final class TestXSSFWorkbook extends BaseTestXWorkbook {
     }
     
     /**
-     * See bug #61700 test data tables
-     *
+     * See bug #61700
      * @throws Exception
      */
     @Test
@@ -1154,14 +1152,14 @@ public final class TestXSSFWorkbook extends BaseTestXWorkbook {
         Workbook workbook = _testDataProvider.createWorkbook();
         workbook.createSheet().createRow(0).createCell(0).setCellFormula("B1+C1");
         workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
-
+    
         assertFalse(workbook.getForceFormulaRecalculation());
         workbook.setForceFormulaRecalculation(true);
         assertTrue(workbook.getForceFormulaRecalculation());
-
+    
         Workbook wbBack = _testDataProvider.writeOutAndReadBack(workbook);
         assertTrue(wbBack.getForceFormulaRecalculation());
-
+    
         workbook.close();
         wbBack.close();
     }