diff --git a/src/EPPlus/FormulaParsing/Excel/Functions/RefAndLookup/Filter.cs b/src/EPPlus/FormulaParsing/Excel/Functions/RefAndLookup/Filter.cs index 829edc6e5..19fd0a764 100644 --- a/src/EPPlus/FormulaParsing/Excel/Functions/RefAndLookup/Filter.cs +++ b/src/EPPlus/FormulaParsing/Excel/Functions/RefAndLookup/Filter.cs @@ -137,13 +137,23 @@ private static CompileResult FilterOnColumn(IRangeInfo arg1, IRangeInfo arg2, Fu var checkDimension = !arg2.IsInMemoryRange; var fc = arg2.Address.FromCol; var dfc = arg2.Dimension.FromCol; - for (int c = 0; c < s2.NumberOfCols; c++) + var columns = s2.NumberOfCols == 1 ? s1.NumberOfCols : s2.NumberOfCols; + for (int c = 0; c < columns; c++) { if (checkDimension && fc + c > dfc) { break; } - var boolValue = ConvertUtil.GetValueDouble(arg2.GetOffset(0, c), false, true); + int boolIx; + if(s2.NumberOfCols == 1) + { + boolIx = 0; + } + else + { + boolIx = c; + } + var boolValue = ConvertUtil.GetValueDouble(arg2.GetOffset(0, boolIx), false, true); if (double.IsNaN(boolValue)) { return CompileResult.GetDynamicArrayResultError(eErrorType.Value); diff --git a/src/EPPlusTest/FormulaParsing/Excel/Functions/RefAndLookup/FilterTests.cs b/src/EPPlusTest/FormulaParsing/Excel/Functions/RefAndLookup/FilterTests.cs index 5b3e78297..6c248e1e7 100644 --- a/src/EPPlusTest/FormulaParsing/Excel/Functions/RefAndLookup/FilterTests.cs +++ b/src/EPPlusTest/FormulaParsing/Excel/Functions/RefAndLookup/FilterTests.cs @@ -83,5 +83,26 @@ public void FilterShouldHandleNAAsIfEmptyValue() Assert.AreEqual("Joe", s.Cells["C1"].Value); } } + + [TestMethod] + public void Filter_SingleColumnInclude_BroadcastsAcrossAllValueColumns() + { + using (var package = new ExcelPackage()) + { + var s = package.Workbook.Worksheets.Add("test"); + + s.Cells["A1"].Value = "GL-40010 - Office Supplies"; + s.Cells["B1"].Value = 4520.75d; + s.Cells["C1"].Value = "Not Posted"; + + s.Cells["E1"].Formula = "FILTER(A1:B1, C1 <> \"Posted!\", 0)"; + s.Calculate(); + + Assert.AreEqual("GL-40010 - Office Supplies", s.Cells["E1"].Value, + "Label-kolumnen ska behållas."); + Assert.AreEqual(4520.75d, s.Cells["F1"].Value, + "Beloppskolumnen ska också behållas via broadcast."); + } + } } } diff --git a/src/EPPlusTest/Issues/FormulaCalculationIssues.cs b/src/EPPlusTest/Issues/FormulaCalculationIssues.cs index 149b54db1..5405496ea 100644 --- a/src/EPPlusTest/Issues/FormulaCalculationIssues.cs +++ b/src/EPPlusTest/Issues/FormulaCalculationIssues.cs @@ -1679,6 +1679,19 @@ public void s1054() Assert.AreEqual(1258679d, result); } } + + [TestMethod] + public void s1060() + { + using (var p = OpenTemplatePackage("s1060.xlsx")) + { + var ws = p.Workbook.Worksheets[0]; + ws.Cells["A12"].Calculate(); + var result = ws.Cells["A13"].Value; + Assert.AreEqual(4520.75, result); + } + } + } }