Skip to content

Commit 61d0ed1

Browse files
authored
This closes qax-os#987: support nested calc for if formula (qax-os#988)
1 parent 43a057b commit 61d0ed1

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

calc.go

+17-4
Original file line numberDiff line numberDiff line change
@@ -6746,7 +6746,7 @@ func (fn *formulaFuncs) IF(argsList *list.List) formulaArg {
67466746
var (
67476747
cond bool
67486748
err error
6749-
result string
6749+
result formulaArg
67506750
)
67516751
switch token.Type {
67526752
case ArgString:
@@ -6757,13 +6757,26 @@ func (fn *formulaFuncs) IF(argsList *list.List) formulaArg {
67576757
return newBoolFormulaArg(cond)
67586758
}
67596759
if cond {
6760-
return newStringFormulaArg(argsList.Front().Next().Value.(formulaArg).String)
6760+
value := argsList.Front().Next().Value.(formulaArg)
6761+
switch value.Type {
6762+
case ArgNumber:
6763+
result = value.ToNumber()
6764+
default:
6765+
result = newStringFormulaArg(value.String)
6766+
}
6767+
return result
67616768
}
67626769
if argsList.Len() == 3 {
6763-
result = argsList.Back().Value.(formulaArg).String
6770+
value := argsList.Back().Value.(formulaArg)
6771+
switch value.Type {
6772+
case ArgNumber:
6773+
result = value.ToNumber()
6774+
default:
6775+
result = newStringFormulaArg(value.String)
6776+
}
67646777
}
67656778
}
6766-
return newStringFormulaArg(result)
6779+
return result
67676780
}
67686781

67696782
// Lookup and Reference Functions

calc_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -1090,6 +1090,8 @@ func TestCalcCellValue(t *testing.T) {
10901090
`=IF(1<>1, "equal", "notequal")`: "notequal",
10911091
`=IF("A"="A", "equal", "notequal")`: "equal",
10921092
`=IF("A"<>"A", "equal", "notequal")`: "notequal",
1093+
`=IF(FALSE,0,ROUND(4/2,0))`: "2",
1094+
`=IF(TRUE,ROUND(4/2,0),0)`: "2",
10931095
// Excel Lookup and Reference Functions
10941096
// CHOOSE
10951097
"=CHOOSE(4,\"red\",\"blue\",\"green\",\"brown\")": "brown",

0 commit comments

Comments
 (0)