Skip to content

Commit 700af6a

Browse files
committed
This fixed qax-os#1564, apply all of its arguments that meet multiple criteria
1 parent dcb26b2 commit 700af6a

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

calc.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -7812,16 +7812,14 @@ func formulaIfsMatch(args []formulaArg) (cellRefs []cellRef) {
78127812
}
78137813
}
78147814
} else {
7815+
match = []cellRef{}
78157816
for _, ref := range cellRefs {
78167817
value := matrix[ref.Row][ref.Col]
78177818
if ok, _ := formulaCriteriaEval(value.Value(), criteria); ok {
78187819
match = append(match, ref)
78197820
}
78207821
}
78217822
}
7822-
if len(match) == 0 {
7823-
return
7824-
}
78257823
cellRefs = match[:]
78267824
}
78277825
return
@@ -14397,7 +14395,7 @@ func (fn *formulaFuncs) MATCH(argsList *list.List) formulaArg {
1439714395
}
1439814396
switch lookupArrayArg.Type {
1439914397
case ArgMatrix:
14400-
if len(lookupArrayArg.Matrix[0]) != 1 {
14398+
if len(lookupArrayArg.Matrix) != 1 && len(lookupArrayArg.Matrix[0]) != 1 {
1440114399
return newErrorFormulaArg(formulaErrorNA, lookupArrayErr)
1440214400
}
1440314401
lookupArray = lookupArrayArg.ToList()

calc_test.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -3828,7 +3828,8 @@ func TestCalcCellValue(t *testing.T) {
38283828
"=MATCH(0,A1:A1,0,0)": {"#VALUE!", "MATCH requires 1 or 2 arguments"},
38293829
"=MATCH(0,A1:A1,\"x\")": {"#VALUE!", "MATCH requires numeric match_type argument"},
38303830
"=MATCH(0,A1)": {"#N/A", "MATCH arguments lookup_array should be one-dimensional array"},
3831-
"=MATCH(0,A1:B1)": {"#N/A", "MATCH arguments lookup_array should be one-dimensional array"},
3831+
"=MATCH(0,A1:B2)": {"#N/A", "MATCH arguments lookup_array should be one-dimensional array"},
3832+
"=MATCH(0,A1:B1)": {"#N/A", "#N/A"},
38323833
// TRANSPOSE
38333834
"=TRANSPOSE()": {"#VALUE!", "TRANSPOSE requires 1 argument"},
38343835
// HYPERLINK
@@ -5131,10 +5132,14 @@ func TestCalcSUMIFSAndAVERAGEIFS(t *testing.T) {
51315132
}
51325133
f := prepareCalcData(cellData)
51335134
formulaList := map[string]string{
5134-
"=AVERAGEIFS(D2:D13,A2:A13,1,B2:B13,\"North\")": "174000",
5135-
"=AVERAGEIFS(D2:D13,A2:A13,\">2\",C2:C13,\"Jeff\")": "285500",
5136-
"=SUMIFS(D2:D13,A2:A13,1,B2:B13,\"North\")": "348000",
5137-
"=SUMIFS(D2:D13,A2:A13,\">2\",C2:C13,\"Jeff\")": "571000",
5135+
"=AVERAGEIFS(D2:D13,A2:A13,1,B2:B13,\"North\")": "174000",
5136+
"=AVERAGEIFS(D2:D13,A2:A13,\">2\",C2:C13,\"Jeff\")": "285500",
5137+
"=SUMIFS(D2:D13,A2:A13,1,B2:B13,\"North\")": "348000",
5138+
"=SUMIFS(D2:D13,A2:A13,\">2\",C2:C13,\"Jeff\")": "571000",
5139+
"=SUMIFS(D2:D13,A2:A13,1,D2:D13,125000)": "125000",
5140+
"=SUMIFS(D2:D13,A2:A13,1,D2:D13,\">100000\",C2:C13,\"Chris\")": "125000",
5141+
"=SUMIFS(D2:D13,A2:A13,1,D2:D13,\"<40000\",C2:C13,\"Chris\")": "0",
5142+
"=SUMIFS(D2:D13,A2:A13,1,A2:A13,2)": "0",
51385143
}
51395144
for formula, expected := range formulaList {
51405145
assert.NoError(t, f.SetCellFormula("Sheet1", "E1", formula))
@@ -5147,6 +5152,7 @@ func TestCalcSUMIFSAndAVERAGEIFS(t *testing.T) {
51475152
"=AVERAGEIFS(H1,\"\")": {"#VALUE!", "AVERAGEIFS requires at least 3 arguments"},
51485153
"=AVERAGEIFS(H1,\"\",TRUE,1)": {"#N/A", "#N/A"},
51495154
"=AVERAGEIFS(H1,\"\",TRUE)": {"#DIV/0!", "AVERAGEIF divide by zero"},
5155+
"=AVERAGEIFS(D2:D13,A2:A13,1,A2:A13,2)": {"#DIV/0!", "AVERAGEIF divide by zero"},
51505156
"=SUMIFS()": {"#VALUE!", "SUMIFS requires at least 3 arguments"},
51515157
"=SUMIFS(D2:D13,A2:A13,1,B2:B13)": {"#N/A", "#N/A"},
51525158
"=SUMIFS(D20:D23,A2:A13,\">2\",C2:C13,\"Jeff\")": {"#VALUE!", "#VALUE!"},

0 commit comments

Comments
 (0)