diff options
author | xuri <xuri.me@gmail.com> | 2022-03-04 00:44:50 +0800 |
---|---|---|
committer | xuri <xuri.me@gmail.com> | 2022-03-04 00:44:50 +0800 |
commit | 129052ae7db0fd2c59b1ea9158df0e75450cad42 (patch) | |
tree | 6f38fd9e349f7d568d5cb17c53235479ae8b703a | |
parent | 3971e8a48b25614dfe685c4766c1bb66cd22fe18 (diff) |
This closes #1164, fix nested formula calculation result error
-rw-r--r-- | calc.go | 11 | ||||
-rw-r--r-- | calc_test.go | 1 |
2 files changed, 12 insertions, 0 deletions
@@ -809,6 +809,17 @@ func (f *File) evalInfixExp(sheet, cell string, tokens []efp.Token) (efp.Token, } } + if isEndParenthesesToken(token) && isBeginParenthesesToken(opftStack.Peek().(efp.Token)) { + if arg := argsStack.Peek().(*list.List).Back(); arg != nil { + opfdStack.Push(efp.Token{ + TType: efp.TokenTypeOperand, + TSubType: efp.TokenSubTypeNumber, + TValue: arg.Value.(formulaArg).Value(), + }) + argsStack.Peek().(*list.List).Remove(arg) + } + } + // check current token is opft if err = f.parseToken(sheet, token, opfdStack, opftStack); err != nil { return efp.Token{}, err diff --git a/calc_test.go b/calc_test.go index a804b58..3749702 100644 --- a/calc_test.go +++ b/calc_test.go @@ -725,6 +725,7 @@ func TestCalcCellValue(t *testing.T) { "=1+SUM(SUM(1,2*3),4)*-4/2+5+(4+2)*3": "2", "=1+SUM(SUM(1,2*3),4)*4/3+5+(4+2)*3": "38.666666666666664", "=SUM(1+ROW())": "2", + "=SUM((SUM(2))+1)": "3", // SUMIF `=SUMIF(F1:F5, "")`: "0", `=SUMIF(A1:A5, "3")`: "3", |