https://bz.apache.org/bugzilla/show_bug.cgi?id=58648
Bug ID: 58648
Summary: FormulaParser throws exception in parseSimpleFactor()
when getCellFormula() is called on a cell and the
formula contains spaces between closing parentheses ")
)"
Product: POI
Version: 3.13-FINAL
Hardware: PC
Status: NEW
Severity: critical
Priority: P2
Component: SS Common
Assignee: [email protected]
Reporter: [email protected]
To reproduce:
Define an XSSFCell with a formula like: "((1 + 1) )".
Note the extra space between the closing parentheses.
Or create a spreadsheet with a cell with the formula specified above, save it
and then read it in as a workbook. Navigate via POI to the sheet, row, and
cell in question.
Call getCellFormula() on the cell.
Results in an exception:
org.apache.poi.ss.formula.FormulaParseException: Parse error near char ... ')'
in specified formula '((1 + 1) )'. Expected cell ref or constant literal
at org.apache.poi.ss.formula.FormulaParser.expected(FormulaParser.java:208)
at
org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1148)
at
org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1103)
at
org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1090)
at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1450)
at
org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1570)
at
org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1554)
at
org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1511)
at
org.apache.poi.ss.formula.FormulaParser.intersectionExpression(FormulaParser.java:1499)
at
org.apache.poi.ss.formula.FormulaParser.unionExpression(FormulaParser.java:1472)
at
org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1131)
at
org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1103)
at
org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1090)
at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1450)
at
org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1570)
at
org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1554)
at
org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1511)
at
org.apache.poi.ss.formula.FormulaParser.Arguments(FormulaParser.java:1076)
at org.apache.poi.ss.formula.FormulaParser.function(FormulaParser.java:963)
at
org.apache.poi.ss.formula.FormulaParser.parseNonRange(FormulaParser.java:556)
at
org.apache.poi.ss.formula.FormulaParser.parseRangeable(FormulaParser.java:524)
at
org.apache.poi.ss.formula.FormulaParser.parseRangeExpression(FormulaParser.java:257)
at
org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1143)
at
org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1103)
at
org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1090)
at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1450)
at
org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1570)
at
org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1554)
at
org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1511)
at
org.apache.poi.ss.formula.FormulaParser.intersectionExpression(FormulaParser.java:1492)
at
org.apache.poi.ss.formula.FormulaParser.unionExpression(FormulaParser.java:1472)
at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:1612)
at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:153)
at
org.apache.poi.xssf.usermodel.XSSFCell.convertSharedFormula(XSSFCell.java:421)
at org.apache.poi.xssf.usermodel.XSSFCell.getCellFormula(XSSFCell.java:393)
Remove the white space between the two closing parentheses and the exception
goes away.
Proposed fix:
Add an additional call to "SkipWhite()" before the call to "Match(')');" inside
the case for '('. Near line 1130 in parseSimpleFactor method of
FormulaParser.java (release version 3.13).
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]