diff --git a/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs b/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs index 99445b7..9886f1b 100644 --- a/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs +++ b/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs @@ -1,4 +1,5 @@ using System; + namespace ClosedXML.Excel { using System.Collections.Generic; @@ -6,11 +7,14 @@ public interface IXLAutoFilter { IXLFilterColumn Column(String column); + IXLFilterColumn Column(Int32 column); IXLAutoFilter Sort(Int32 columnToSortBy = 1, XLSortOrder sortOrder = XLSortOrder.Ascending, Boolean matchCase = false, Boolean ignoreBlanks = true); + Boolean Sorted { get; set; } XLSortOrder SortOrder { get; set; } Int32 SortColumn { get; set; } + IEnumerable VisibleRows { get; } } } diff --git a/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs b/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs index 4f2851d..f92858b 100644 --- a/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs +++ b/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace ClosedXML.Excel { @@ -26,5 +27,6 @@ Boolean Sorted { get; set; } XLSortOrder SortOrder { get; set; } Int32 SortColumn { get; set; } + IEnumerable VisibleRows { get; } } } diff --git a/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs b/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs index 84a54a8..70e879e 100644 --- a/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs +++ b/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs @@ -24,7 +24,7 @@ return Sort(columnToSortBy, sortOrder, matchCase, ignoreBlanks); } - #endregion + #endregion IXLAutoFilter Members #region IXLBaseAutoFilter Members @@ -74,7 +74,7 @@ return filterColumn; } - #endregion + #endregion IXLBaseAutoFilter Members public XLAutoFilter Set(IXLRangeBase range) { @@ -167,5 +167,13 @@ ws.ResumeEvents(); return this; } + + public IEnumerable VisibleRows + { + get + { + return Range.Rows(r => !r.WorksheetRow().IsHidden); + } + } } } diff --git a/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs b/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs index 20d17f0..ae1f16b 100644 --- a/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs +++ b/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs @@ -33,6 +33,7 @@ table.DataRange.FirstCell().InsertData(listOfArr); Assert.AreEqual("A1:A5", table.AutoFilter.Range.RangeAddress.ToStringRelative()); + Assert.AreEqual(5, table.AutoFilter.VisibleRows.Count()); } } } @@ -49,7 +50,7 @@ .CellBelow().SetValue("Carlos") .CellBelow().SetValue("Dominic"); ws.RangeUsed().SetAutoFilter().Sort(); - Assert.AreEqual(ws.Cell(4, 3).GetString(), "Carlos"); + Assert.AreEqual("Carlos", ws.Cell(4, 3).GetString()); } } } @@ -156,5 +157,31 @@ } } } + + [Test] + public void AutoFilterVisibleRows() + { + using (var wb = new XLWorkbook()) + { + using (var ws = wb.Worksheets.Add("Sheet1")) + { + ws.Cell(3, 3).SetValue("Names") + .CellBelow().SetValue("Manuel") + .CellBelow().SetValue("Carlos") + .CellBelow().SetValue("Dominic"); + + var autoFilter = ws.RangeUsed() + .SetAutoFilter(); + + autoFilter.Column(1).AddFilter("Carlos"); + + Assert.AreEqual("Carlos", ws.Cell(5, 3).GetString()); + Assert.AreEqual(2, autoFilter.VisibleRows.Count()); + Assert.AreEqual(3, autoFilter.VisibleRows.First().WorksheetRow().RowNumber()); + Assert.AreEqual(5, autoFilter.VisibleRows.Last().WorksheetRow().RowNumber()); + } + } + } + } }