diff --git a/src/java/org/apache/poi/hssf/model/FormulaParser.java b/src/java/org/apache/poi/hssf/model/FormulaParser.java index 78a94bff48..2141b53ed0 100644 --- a/src/java/org/apache/poi/hssf/model/FormulaParser.java +++ b/src/java/org/apache/poi/hssf/model/FormulaParser.java @@ -115,7 +115,7 @@ public class FormulaParser { private void Abort(String s) { Error(s); //System.exit(1); //throw exception?? - throw new RuntimeException("Cannot Parse, sorry : "+s); + throw new RuntimeException("Cannot Parse, sorry : "+s + " [Formula String was: '"+formulaString+"']"); } @@ -466,6 +466,11 @@ public class FormulaParser { Factor(); tokens.add(new UnaryMinusPtg()); } + else if (look == '+') { + Match('+'); + Factor(); + tokens.add(new UnaryPlusPtg()); + } else if (look == '(' ) { Match('('); Expression(); diff --git a/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java b/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java index ec840ba3b9..1e69ce0ed3 100644 --- a/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java +++ b/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java @@ -36,6 +36,7 @@ import org.apache.poi.hssf.record.formula.Ptg; import org.apache.poi.hssf.record.formula.ReferencePtg; import org.apache.poi.hssf.record.formula.StringPtg; import org.apache.poi.hssf.record.formula.UnaryMinusPtg; +import org.apache.poi.hssf.record.formula.UnaryPlusPtg; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; @@ -323,7 +324,17 @@ public class TestFormulaParser extends TestCase { Ptg[] ptg = fp.getRPNPtg(); assertTrue("got 2 ptgs", ptg.length == 2); assertTrue("first ptg is reference",ptg[0] instanceof ReferencePtg); - assertTrue("second ptg is string",ptg[1] instanceof UnaryMinusPtg); + assertTrue("second ptg is Minus",ptg[1] instanceof UnaryMinusPtg); + } + + public void testUnaryPlus() + { + FormulaParser fp = new FormulaParser("+A1", null); + fp.parse(); + Ptg[] ptg = fp.getRPNPtg(); + assertTrue("got 2 ptgs", ptg.length == 2); + assertTrue("first ptg is reference",ptg[0] instanceof ReferencePtg); + assertTrue("second ptg is Plus",ptg[1] instanceof UnaryPlusPtg); } public void testLeadingSpaceInString()