diff --git a/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs b/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs index 88ca907..f13ce40 100644 --- a/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs +++ b/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs @@ -1,25 +1,30 @@ using System; + namespace ClosedXML.Excel { - using System.Collections.Generic; public enum XLFilterType { Regular, Custom, TopBottom, Dynamic } + public enum XLFilterDynamicType { AboveAverage, BelowAverage } - public enum XLTopBottomPart { Top, Bottom} + + public enum XLTopBottomPart { Top, Bottom } + public interface IXLBaseAutoFilter { Boolean Enabled { get; set; } IXLRange Range { get; set; } + IXLBaseAutoFilter Set(IXLRangeBase range); + IXLBaseAutoFilter Clear(); IXLFilterColumn Column(String column); + IXLFilterColumn Column(Int32 column); IXLBaseAutoFilter Sort(Int32 columnToSortBy, XLSortOrder sortOrder = XLSortOrder.Ascending, Boolean matchCase = false, Boolean ignoreBlanks = true); + Boolean Sorted { get; set; } XLSortOrder SortOrder { get; set; } Int32 SortColumn { get; set; } - - } -} \ No newline at end of file +} diff --git a/ClosedXML/Excel/Ranges/IXLRangeBase.cs b/ClosedXML/Excel/Ranges/IXLRangeBase.cs index 064d975..e14d250 100644 --- a/ClosedXML/Excel/Ranges/IXLRangeBase.cs +++ b/ClosedXML/Excel/Ranges/IXLRangeBase.cs @@ -262,6 +262,8 @@ IXLAutoFilter SetAutoFilter(); + IXLAutoFilter SetAutoFilter(Boolean value); + IXLDataValidation SetDataValidation(); IXLConditionalFormat AddConditionalFormat(); diff --git a/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/Excel/Ranges/XLRangeBase.cs index 190d473..71e5d5f 100644 --- a/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -1757,8 +1757,16 @@ public IXLAutoFilter SetAutoFilter() { - using (var asRange = AsRange()) - return Worksheet.AutoFilter.Set(asRange); + return SetAutoFilter(true); + } + + public IXLAutoFilter SetAutoFilter(Boolean value) + { + if (value) + using (var asRange = AsRange()) + return Worksheet.AutoFilter.Set(asRange); + else + return Worksheet.AutoFilter.Clear(); } #region Sort diff --git a/ClosedXML_Examples/Misc/AutoFilter.cs b/ClosedXML_Examples/Misc/AutoFilter.cs index 21b8402..bb119b2 100644 --- a/ClosedXML_Examples/Misc/AutoFilter.cs +++ b/ClosedXML_Examples/Misc/AutoFilter.cs @@ -50,11 +50,11 @@ ws.Cell("A4").Value = "Dagny"; ws.RangeUsed().SetAutoFilter(); - - // Your can turn off the autofilter in three ways: - // 1) worksheet.AutoFilterRange.SetAutoFilter(false) - // 2) worksheet.AutoFilterRange = null - // 3) Pick any range in the worksheet and call range.SetAutoFilter(false); + + // Your can turn off the autofilter by: + // 1) worksheet.AutoFilter.Clear() + // 2) worksheet.SetAutoFilter(false) + // 3) Pick any range in the worksheet and call the above methods on the range wb.SaveAs(filePath); } diff --git a/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs b/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs index 25dff84..da8bde2 100644 --- a/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs +++ b/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs @@ -72,5 +72,27 @@ ws.AutoFilter.Clear(); Assert.That(!ws.AutoFilter.Enabled); } + + [Test] + public void CanClearAutoFilter2() + { + using (var wb = new XLWorkbook()) + { + var ws = wb.Worksheets.Add("AutoFilter"); + ws.Cell("A1").Value = "Names"; + ws.Cell("A2").Value = "John"; + ws.Cell("A3").Value = "Hank"; + ws.Cell("A4").Value = "Dagny"; + + ws.SetAutoFilter(false); + Assert.That(!ws.AutoFilter.Enabled); + + ws.RangeUsed().SetAutoFilter(); + Assert.That(ws.AutoFilter.Enabled); + + ws.RangeUsed().SetAutoFilter(false); + Assert.That(!ws.AutoFilter.Enabled); + } + } } }