]> source.dussan.org Git - poi.git/commitdiff
Add get/setForceFormulaRecalculation for XSSF, and promote the methods to the common...
authorNick Burch <nick@apache.org>
Thu, 21 Apr 2011 11:52:52 +0000 (11:52 +0000)
committerNick Burch <nick@apache.org>
Thu, 21 Apr 2011 11:52:52 +0000 (11:52 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1095667 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/ss/usermodel/Sheet.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java

index 5a90ab94e0581fe02309abde337df3e4999dcac8..d09d49371fd673f6f65ed5eb0b25f744f721c3bd 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta3" date="2011-??-??">
+           <action dev="poi-developers" type="add">Add get/setForceFormulaRecalculation for XSSF, and promote the methods to the common usermodel Sheet</action>
            <action dev="poi-developers" type="fix">Tweak the logic for sizing the HSSFCells array on a HSSFRow to reduce memory over allocation in many use cases</action>
            <action dev="poi-developers" type="add">49765 - Support for adding a picture to a XSSFRun</action>
            <action dev="poi-developers" type="fix">Rename/Move xssf.model.Table to xssf.usermodel.XSSFTable as it now has usermodel-like features</action>
index b3eb1ee2a8d8156a92a770e34dc154e93c582451..349c42cbdf864d193f76b8ce3fc9283ca9987a04 100644 (file)
@@ -258,6 +258,21 @@ public interface Sheet extends Iterable<Row> {
      */
     Iterator<Row> rowIterator();
 
+    /**
+     * Control if Excel should be asked to recalculate all formulas when the
+     *  workbook is opened. 
+     * Calculating the formula values with {@link FormulaEvaluator} is the
+     *  recommended solution, but this may be used for certain cases where
+     *  evaluation in POI is not possible.
+     */
+    void setForceFormulaRecalculation(boolean value);
+
+    /**
+     * Whether Excel will be asked to recalculate all formulas when the
+     *  workbook is opened.  
+     */
+    boolean getForceFormulaRecalculation();
+    
     /**
      * Flag indicating whether the sheet displays Automatic Page Breaks.
      *
index 3d72c82f8fd68d7f9d57197713c88a7bbbbd9760..244a9e063f9d20d785d7f83033745a3c458ea04b 100644 (file)
@@ -46,6 +46,7 @@ import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.ss.usermodel.DataValidation;
 import org.apache.poi.ss.usermodel.DataValidationHelper;
 import org.apache.poi.ss.usermodel.Footer;
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
 import org.apache.poi.ss.usermodel.Header;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -89,6 +90,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPrintOptions;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSelection;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetCalcPr;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetData;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetFormatPr;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetPr;
@@ -1454,6 +1456,41 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
         }
     }
 
+    /**
+     * Control if Excel should be asked to recalculate all formulas when the
+     *  workbook is opened, via the "sheetCalcPr fullCalcOnLoad" option.
+     * Calculating the formula values with {@link FormulaEvaluator} is the
+     *  recommended solution, but this may be used for certain cases where
+     *  evaluation in POI is not possible.
+     */
+    public void setForceFormulaRecalculation(boolean value) {
+       if(worksheet.isSetSheetCalcPr()) {
+          // Change the current setting
+          CTSheetCalcPr calc = worksheet.getSheetCalcPr();
+          calc.setFullCalcOnLoad(value);
+       }
+       else if(value) {
+          // Add the Calc block and set it
+          CTSheetCalcPr calc = worksheet.addNewSheetCalcPr();
+          calc.setFullCalcOnLoad(value);
+       }
+       else {
+          // Not set, requested not, nothing to do
+       }
+    }
+
+    /**
+     * Whether Excel will be asked to recalculate all formulas when the
+     *  workbook is opened.  
+     */
+    public boolean getForceFormulaRecalculation() {
+       if(worksheet.isSetSheetCalcPr()) {
+          CTSheetCalcPr calc = worksheet.getSheetCalcPr();
+          return calc.getFullCalcOnLoad();
+       }
+       return false;
+    }
+    
     /**
      * @return an iterator of the PHYSICAL rows.  Meaning the 3rd element may not
      * be the third row if say for instance the second row is undefined.