return;
}
- XSSFEvaluationWorkbook fpb = XSSFEvaluationWorkbook.create(wb);
- //validate through the FormulaParser
- FormulaParser.parse(formula, fpb, formulaType, wb.getSheetIndex(getSheet()), getRowIndex());
+ if(wb.getCellFormulaValidation()) {
+ XSSFEvaluationWorkbook fpb = XSSFEvaluationWorkbook.create(wb);
+ //validate through the FormulaParser
+ FormulaParser.parse(formula, fpb, formulaType, wb.getSheetIndex(getSheet()), getRowIndex());
+ }
CTCellFormula f = CTCellFormula.Factory.newInstance();
f.setStringValue(formula);
*/
private MissingCellPolicy _missingCellPolicy = MissingCellPolicy.RETURN_NULL_AND_BLANK;
+ /**
+ * Whether a call to {@link XSSFCell#setCellFormula(String)} will validate the formula or not.
+ */
+ private boolean cellFormulaValidation = true;
+
/**
* array of pictures for this workbook
*/
return oleId;
}
+
+ /**
+ * Whether a call to {@link XSSFCell#setCellFormula(String)} will validate the formula or not.
+ *
+ * @param value true if the application will validate the formula is correct
+ * @since 3.17
+ */
+ public void setCellFormulaValidation(final boolean value) {
+ this.cellFormulaValidation = value;
+ }
+
+ /**
+ * Whether a call to {@link XSSFCell#setCellFormula(String)} will validate the formula or not.
+ *
+ * @since 3.17
+ */
+ public boolean getCellFormulaValidation() {
+ return this.cellFormulaValidation;
+ }
}
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
import java.io.IOException;
import java.util.List;
import org.apache.poi.common.usermodel.HyperlinkType;
import org.apache.poi.hssf.HSSFITestDataProvider;
import org.apache.poi.ss.SpreadsheetVersion;
+import org.apache.poi.ss.formula.FormulaParseException;
import org.apache.poi.ss.usermodel.BaseTestXCell;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
assertEquals(CellType.BLANK, cell.getCellType());
assertEquals(STCellType.N, ctCell.getT());
assertEquals("", cell.getStringCellValue());
+
+ // check behavior with setCellFormulaValidation
+ final String invalidFormula = "A", validFormula = "A2";
+ FormulaParseException fpe = null;
+ // check that default is true
+ assertTrue(wb.getCellFormulaValidation());
+
+ // check that valid formula does not throw exception
+ try {
+ cell.setCellFormula(validFormula);
+ } catch(FormulaParseException e) {
+ fpe = e;
+ }
+ assertNull(fpe);
+
+ // check that invalid formula does throw exception
+ try {
+ cell.setCellFormula(invalidFormula);
+ } catch(FormulaParseException e) {
+ fpe = e;
+ }
+ assertNotNull(fpe);
+ fpe = null;
+
+ // set cell formula validation to false
+ wb.setCellFormulaValidation(false);
+ assertFalse(wb.getCellFormulaValidation());
+
+ // check that neither valid nor invalid formula throw an exception
+ try {
+ cell.setCellFormula(validFormula);
+ cell.setCellFormula(invalidFormula);
+ } catch(FormulaParseException e) {
+ fpe = e;
+ }
+ assertNull(fpe);
} finally {
wb.close();
}