From: Greg Woolsey Date: Sun, 31 Mar 2019 01:00:05 +0000 (+0000) Subject: #61700 getForceFormulaRecalculation() returns wrong value X-Git-Tag: REL_4_1_0~11 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6b76706ef7851a2c6567e2162275f72049456215;p=poi.git #61700 getForceFormulaRecalculation() returns wrong value 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 --- diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java index f2c9635303..c6c015a442 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java @@ -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(); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java index 0f39461002..295958ee73 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java @@ -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(); }