diff options
author | Nick Burch <nick@apache.org> | 2015-07-31 22:07:58 +0000 |
---|---|---|
committer | Nick Burch <nick@apache.org> | 2015-07-31 22:07:58 +0000 |
commit | e4c9b7ca513ac0f6eccdd23caa808b86c8ec255e (patch) | |
tree | 3efcfd3b7bdf82a16b615cf09082a05752bb626b /src/ooxml/java/org/apache | |
parent | 52877b8368d4b5c56eff4b826e3940039bfd8649 (diff) | |
download | poi-e4c9b7ca513ac0f6eccdd23caa808b86c8ec255e.tar.gz poi-e4c9b7ca513ac0f6eccdd23caa808b86c8ec255e.zip |
Start re-enabling some SXSSF formula evaluation tests, with required fixes #58200
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1693662 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/java/org/apache')
3 files changed, 54 insertions, 6 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java index f871f597b4..c95430bfc1 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java @@ -908,7 +908,9 @@ public class SXSSFCell implements Cell { } private String convertCellValueToString() { int cellType = getCellType(); - + return convertCellValueToString(cellType); + } + private String convertCellValueToString(int cellType) { switch (cellType) { case CELL_TYPE_BLANK: return ""; @@ -922,6 +924,12 @@ public class SXSSFCell implements Cell { byte errVal = getErrorCellValue(); return FormulaError.forInt(errVal).getString(); case CELL_TYPE_FORMULA: + if (_value != null) { + FormulaValue fv = (FormulaValue)_value; + if (fv.getFormulaType() != CELL_TYPE_FORMULA) { + return convertCellValueToString(fv.getFormulaType()); + } + } return ""; default: throw new IllegalStateException("Unexpected cell type (" + cellType + ")"); diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCreationHelper.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCreationHelper.java index d641583fd5..128803bfe0 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCreationHelper.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCreationHelper.java @@ -17,6 +17,11 @@ package org.apache.poi.xssf.streaming; +import org.apache.poi.ss.usermodel.ClientAnchor; +import org.apache.poi.ss.usermodel.CreationHelper; +import org.apache.poi.ss.usermodel.DataFormat; +import org.apache.poi.ss.usermodel.ExtendedColor; +import org.apache.poi.ss.usermodel.Hyperlink; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; import org.apache.poi.xssf.usermodel.XSSFCreationHelper; @@ -27,13 +32,14 @@ import org.apache.poi.xssf.usermodel.XSSFRichTextString; * based on the Streaming Workbook, and some on the related * regular XSSF Workbook */ -public class SXSSFCreationHelper extends XSSFCreationHelper { +public class SXSSFCreationHelper implements CreationHelper { private static POILogger logger = POILogFactory.getLogger(SXSSFCreationHelper.class); private SXSSFWorkbook wb; + private XSSFCreationHelper helper; public SXSSFCreationHelper(SXSSFWorkbook workbook) { - super(workbook.getXSSFWorkbook()); + this.helper = new XSSFCreationHelper(workbook.getXSSFWorkbook()); this.wb = workbook; } @@ -45,4 +51,18 @@ public class SXSSFCreationHelper extends XSSFCreationHelper { public SXSSFFormulaEvaluator createFormulaEvaluator() { return new SXSSFFormulaEvaluator(wb); } + + // Pass-through methods + public DataFormat createDataFormat() { + return helper.createDataFormat(); + } + public Hyperlink createHyperlink(int type) { + return helper.createHyperlink(type); + } + public ExtendedColor createExtendedColor() { + return helper.createExtendedColor(); + } + public ClientAnchor createClientAnchor() { + return helper.createClientAnchor(); + } } diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java index 40abe9fe8d..ff81cd3578 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java @@ -25,13 +25,13 @@ import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; -import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator; +import org.apache.poi.xssf.usermodel.BaseXSSFFormulaEvaluator; /** * Streaming-specific Formula Evaluator, which is able to * lookup cells within the current Window. */ -public class SXSSFFormulaEvaluator extends XSSFFormulaEvaluator { +public final class SXSSFFormulaEvaluator extends BaseXSSFFormulaEvaluator { private static POILogger logger = POILogFactory.getLogger(SXSSFFormulaEvaluator.class); private SXSSFWorkbook wb; @@ -43,7 +43,7 @@ public class SXSSFFormulaEvaluator extends XSSFFormulaEvaluator { this(workbook, new WorkbookEvaluator(SXSSFEvaluationWorkbook.create(workbook), stabilityClassifier, udfFinder)); } private SXSSFFormulaEvaluator(SXSSFWorkbook workbook, WorkbookEvaluator bookEvaluator) { - super(workbook.getXSSFWorkbook(), bookEvaluator); + super(bookEvaluator); this.wb = workbook; } @@ -71,6 +71,26 @@ public class SXSSFFormulaEvaluator extends XSSFFormulaEvaluator { } /** + * If cell contains formula, it evaluates the formula, and + * puts the formula result back into the cell, in place + * of the old formula. + * Else if cell does not contain formula, this method leaves + * the cell unchanged. + * Note that the same instance of SXSSFCell is returned to + * allow chained calls like: + * <pre> + * int evaluatedCellType = evaluator.evaluateInCell(cell).getCellType(); + * </pre> + * Be aware that your cell value will be changed to hold the + * result of the formula. If you simply want the formula + * value computed for you, use {@link #evaluateFormulaCell(org.apache.poi.ss.usermodel.Cell)} } + */ + public SXSSFCell evaluateInCell(Cell cell) { + doEvaluateInCell(cell); + return (SXSSFCell)cell; + } + + /** * For active worksheets only, will loop over rows and * cells, evaluating formula cells there. * If formula cells are outside the window for that sheet, |