Apply patch from bug 61033 to add a XSSFWorkbook.setCellFormulaValidation(false) to speed up some operations
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1809071 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
37b5ca2c31
commit
828fb9a86c
@ -564,9 +564,11 @@ public final class XSSFCell implements Cell {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(wb.getCellFormulaValidation()) {
|
||||||
XSSFEvaluationWorkbook fpb = XSSFEvaluationWorkbook.create(wb);
|
XSSFEvaluationWorkbook fpb = XSSFEvaluationWorkbook.create(wb);
|
||||||
//validate through the FormulaParser
|
//validate through the FormulaParser
|
||||||
FormulaParser.parse(formula, fpb, formulaType, wb.getSheetIndex(getSheet()), getRowIndex());
|
FormulaParser.parse(formula, fpb, formulaType, wb.getSheetIndex(getSheet()), getRowIndex());
|
||||||
|
}
|
||||||
|
|
||||||
CTCellFormula f = CTCellFormula.Factory.newInstance();
|
CTCellFormula f = CTCellFormula.Factory.newInstance();
|
||||||
f.setStringValue(formula);
|
f.setStringValue(formula);
|
||||||
|
@ -212,6 +212,11 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
|
|||||||
*/
|
*/
|
||||||
private MissingCellPolicy _missingCellPolicy = MissingCellPolicy.RETURN_NULL_AND_BLANK;
|
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
|
* array of pictures for this workbook
|
||||||
*/
|
*/
|
||||||
@ -2390,4 +2395,23 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
|
|||||||
|
|
||||||
return oleId;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import static org.junit.Assert.assertNotNull;
|
|||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertSame;
|
import static org.junit.Assert.assertSame;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -30,6 +31,7 @@ import java.util.List;
|
|||||||
import org.apache.poi.common.usermodel.HyperlinkType;
|
import org.apache.poi.common.usermodel.HyperlinkType;
|
||||||
import org.apache.poi.hssf.HSSFITestDataProvider;
|
import org.apache.poi.hssf.HSSFITestDataProvider;
|
||||||
import org.apache.poi.ss.SpreadsheetVersion;
|
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.BaseTestXCell;
|
||||||
import org.apache.poi.ss.usermodel.BorderStyle;
|
import org.apache.poi.ss.usermodel.BorderStyle;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
@ -179,6 +181,42 @@ public final class TestXSSFCell extends BaseTestXCell {
|
|||||||
assertEquals(CellType.BLANK, cell.getCellType());
|
assertEquals(CellType.BLANK, cell.getCellType());
|
||||||
assertEquals(STCellType.N, ctCell.getT());
|
assertEquals(STCellType.N, ctCell.getT());
|
||||||
assertEquals("", cell.getStringCellValue());
|
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 {
|
} finally {
|
||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user