diff --git a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
index f4f73d2..80bba6a 100644
--- a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
+++ b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
@@ -124,7 +124,18 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs
index e942fba..5b1285d 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs
@@ -1,9 +1,19 @@
using System;
-namespace ClosedXML.Excel.AutoFilters
+namespace ClosedXML.Excel
{
+ using System.Collections.Generic;
+
public interface IXLAutoFilter
{
- IXLRange Range { get; }
+ //IXLAutoFilter Set();
+ //List Filters { get; }
+ //List CustomFilters { get; }
+ IXLFilterColumn Column(String column);
+ IXLFilterColumn Column(Int32 column);
+ IXLAutoFilter 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/ClosedXML/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs
new file mode 100644
index 0000000..b3f8d66
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs
@@ -0,0 +1,25 @@
+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 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/ClosedXML/ClosedXML/Excel/AutoFilters/IXLCustomFilteredColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLCustomFilteredColumn.cs
new file mode 100644
index 0000000..959d3de
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLCustomFilteredColumn.cs
@@ -0,0 +1,21 @@
+using System;
+namespace ClosedXML.Excel
+{
+ using System.Collections.Generic;
+
+ public interface IXLCustomFilteredColumn
+ {
+ void EqualTo(T value) where T : IComparable;
+ void NotEqualTo(T value) where T : IComparable;
+ void GreaterThan(T value) where T : IComparable;
+ void LessThan(T value) where T : IComparable;
+ void EqualOrGreaterThan(T value) where T : IComparable;
+ void EqualOrLessThan(T value) where T : IComparable;
+ void BeginsWith(String value);
+ void NotBeginsWith(String value);
+ void EndsWith(String value);
+ void NotEndsWith(String value);
+ void Contains(String value);
+ void NotContains(String value);
+ }
+}
\ No newline at end of file
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLFilterColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLFilterColumn.cs
new file mode 100644
index 0000000..a6944c7
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLFilterColumn.cs
@@ -0,0 +1,42 @@
+using System;
+namespace ClosedXML.Excel
+{
+ using System.Collections.Generic;
+
+ public enum XLTopBottomType { Items, Percent }
+ public interface IXLFilterColumn
+ {
+ void Clear();
+
+ IXLFilteredColumn AddFilter(T value) where T : IComparable;
+
+ void Top(Int32 value, XLTopBottomType type = XLTopBottomType.Items);
+ void Bottom(Int32 value, XLTopBottomType type = XLTopBottomType.Items);
+ void AboveAverage();
+ void BelowAverage();
+
+ IXLFilterConnector EqualTo(T value) where T : IComparable;
+ IXLFilterConnector NotEqualTo(T value) where T : IComparable;
+ IXLFilterConnector GreaterThan(T value) where T : IComparable;
+ IXLFilterConnector LessThan(T value) where T : IComparable;
+ IXLFilterConnector EqualOrGreaterThan(T value) where T : IComparable;
+ IXLFilterConnector EqualOrLessThan(T value) where T : IComparable;
+ void Between(T minValue, T maxValue) where T : IComparable;
+ void NotBetween(T minValue, T maxValue) where T : IComparable;
+ IXLFilterConnector BeginsWith(String value);
+ IXLFilterConnector NotBeginsWith(String value);
+ IXLFilterConnector EndsWith(String value);
+ IXLFilterConnector NotEndsWith(String value);
+ IXLFilterConnector Contains(String value);
+ IXLFilterConnector NotContains(String value);
+
+ XLFilterType FilterType { get; set; }
+
+ Int32 TopBottomValue { get; set; }
+ XLTopBottomType TopBottomType { get; set; }
+ XLTopBottomPart TopBottomPart { get; set; }
+
+ XLFilterDynamicType DynamicType { get; set; }
+ Double DynamicValue { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLFilterConnector.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLFilterConnector.cs
new file mode 100644
index 0000000..edb8560
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLFilterConnector.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace ClosedXML.Excel
+{
+ public interface IXLFilterConnector
+ {
+ IXLCustomFilteredColumn And { get; }
+ IXLCustomFilteredColumn Or { get; }
+ }
+}
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLFilteredColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLFilteredColumn.cs
new file mode 100644
index 0000000..d3f31d8
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/IXLFilteredColumn.cs
@@ -0,0 +1,10 @@
+using System;
+namespace ClosedXML.Excel
+{
+ using System.Collections.Generic;
+
+ public interface IXLFilteredColumn
+ {
+ IXLFilteredColumn AddFilter(T value) where T : IComparable;
+ }
+}
\ No newline at end of file
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs
new file mode 100644
index 0000000..75cf8f0
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs
@@ -0,0 +1,136 @@
+using System;
+using System.Linq;
+namespace ClosedXML.Excel
+{
+ using System.Collections.Generic;
+
+ internal class XLAutoFilter: IXLBaseAutoFilter, IXLAutoFilter
+ {
+ public XLAutoFilter()
+ {
+ Filters = new Dictionary>();
+ }
+
+ public Boolean Enabled { get; set; }
+ public IXLRange Range { get; set; }
+ public XLAutoFilter Set(IXLRangeBase range)
+ {
+ Range = range.AsRange();
+ Enabled = true;
+ return this;
+ }
+ public XLAutoFilter Clear()
+ {
+ Enabled = false;
+ Filters.Clear();
+ foreach (var row in Range.Rows().Where(r => r.RowNumber() > 1))
+ {
+ row.WorksheetRow().Unhide();
+ }
+ return this;
+ }
+
+ IXLBaseAutoFilter IXLBaseAutoFilter.Clear()
+ {
+ return Clear();
+ }
+
+ IXLBaseAutoFilter IXLBaseAutoFilter.Set(IXLRangeBase range)
+ {
+ return Set(range);
+ }
+
+ public XLAutoFilter Sort(Int32 columnToSortBy, XLSortOrder sortOrder, Boolean matchCase, Boolean ignoreBlanks)
+ {
+
+ Range.Range(Range.FirstCell().CellBelow(), Range.LastCell()).Sort(columnToSortBy, sortOrder, matchCase, ignoreBlanks);
+ Sorted = true;
+ SortOrder = sortOrder;
+ SortColumn = columnToSortBy;
+
+ if (Enabled)
+ {
+ foreach (var row in Range.Rows().Where(r => r.RowNumber() > 1))
+ {
+ row.WorksheetRow().Unhide();
+ }
+ foreach (var kp in Filters)
+ {
+ Boolean firstFilter = true;
+ foreach (XLFilter filter in kp.Value)
+ {
+ Boolean isText = filter.Value is String;
+ foreach (var row in Range.Rows().Where(r => r.RowNumber() > 1))
+ {
+ Boolean match = isText ? filter.Condition(row.Cell(kp.Key).GetString()) : row.Cell(kp.Key).DataType == XLCellValues.Number && filter.Condition(row.Cell(kp.Key).GetDouble());
+ if (firstFilter)
+ {
+ if (match)
+ row.WorksheetRow().Unhide();
+ else
+ row.WorksheetRow().Hide();
+ }
+ else
+ {
+ if (filter.Connector == XLConnector.And)
+ {
+ if (!row.WorksheetRow().IsHidden)
+ {
+ if (match)
+ row.WorksheetRow().Unhide();
+ else
+ row.WorksheetRow().Hide();
+ }
+ }
+ else if (match)
+ row.WorksheetRow().Unhide();
+ }
+ }
+ firstFilter = false;
+ }
+
+ }
+ Enabled = true;
+ }
+
+ return this;
+ }
+
+ IXLAutoFilter IXLAutoFilter.Sort(Int32 columnToSortBy, XLSortOrder sortOrder, Boolean matchCase, Boolean ignoreBlanks)
+ {
+ return Sort(columnToSortBy, sortOrder, matchCase, ignoreBlanks);
+ }
+
+ IXLBaseAutoFilter IXLBaseAutoFilter.Sort(Int32 columnToSortBy, XLSortOrder sortOrder, Boolean matchCase, Boolean ignoreBlanks)
+ {
+ return Sort(columnToSortBy, sortOrder, matchCase, ignoreBlanks);
+ }
+
+ public Boolean Sorted { get; set; }
+ public XLSortOrder SortOrder { get; set; }
+ public Int32 SortColumn { get; set; }
+
+ public Dictionary> Filters { get; private set; }
+
+ //List Filters { get; }
+ //List CustomFilters { get; }
+ //Boolean Sorted { get; }
+ //Int32 SortColumn { get; }
+ public IXLFilterColumn Column(String column)
+ {
+ return Column(ExcelHelper.GetColumnNumberFromLetter(column));
+ }
+ Dictionary _columns = new Dictionary();
+ public IXLFilterColumn Column(Int32 column)
+ {
+ XLFilterColumn filterColumn;
+ if (!_columns.TryGetValue(column, out filterColumn))
+ {
+ filterColumn = new XLFilterColumn(this, column);
+ _columns.Add(column, filterColumn);
+ }
+
+ return filterColumn;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/XLCustomFilteredColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/XLCustomFilteredColumn.cs
new file mode 100644
index 0000000..4f37c94
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/XLCustomFilteredColumn.cs
@@ -0,0 +1,104 @@
+using System;
+using System.Linq;
+namespace ClosedXML.Excel
+{
+ using System.Collections.Generic;
+
+ internal class XLCustomFilteredColumn: IXLCustomFilteredColumn
+ {
+ private XLAutoFilter _autoFilter;
+ private Int32 _column;
+ private XLConnector _connector;
+ public XLCustomFilteredColumn(XLAutoFilter autoFilter, Int32 column, XLConnector connector)
+ {
+ _autoFilter = autoFilter;
+ _column = column;
+ _connector = connector;
+ }
+
+ public void EqualTo(T value) where T : IComparable
+ {
+ if (typeof(T) == typeof(String))
+ ApplyCustomFilter(value, XLFilterOperator.Equal, v => v.ToString().Equals(value.ToString(), StringComparison.InvariantCultureIgnoreCase));
+ else
+ ApplyCustomFilter(value, XLFilterOperator.Equal, v => (v.CastTo() as IComparable).CompareTo(value) == 0);
+ }
+
+ public void NotEqualTo(T value) where T : IComparable
+ {
+ if (typeof(T) == typeof(String))
+ ApplyCustomFilter(value, XLFilterOperator.NotEqual, v => !v.ToString().Equals(value.ToString(), StringComparison.InvariantCultureIgnoreCase));
+ else
+ ApplyCustomFilter(value, XLFilterOperator.NotEqual, v => (v.CastTo() as IComparable).CompareTo(value) != 0);
+ }
+
+ public void GreaterThan(T value) where T : IComparable
+ {
+ ApplyCustomFilter(value, XLFilterOperator.GreaterThan, v => (v.CastTo() as IComparable).CompareTo(value) > 0);
+ }
+
+ public void LessThan(T value) where T : IComparable
+ {
+ ApplyCustomFilter(value, XLFilterOperator.LessThan, v => (v.CastTo() as IComparable).CompareTo(value) < 0);
+ }
+
+ public void EqualOrGreaterThan(T value) where T : IComparable
+ {
+ ApplyCustomFilter(value, XLFilterOperator.EqualOrGreaterThan, v => (v.CastTo() as IComparable).CompareTo(value) >= 0);
+ }
+
+ public void EqualOrLessThan(T value) where T : IComparable
+ {
+ ApplyCustomFilter(value, XLFilterOperator.EqualOrLessThan, v => (v.CastTo() as IComparable).CompareTo(value) <= 0);
+ }
+
+ public void BeginsWith(String value)
+ {
+ ApplyCustomFilter(value.ToString() + "*", XLFilterOperator.Equal, s => ((string)s).StartsWith(value.ToString(), StringComparison.InvariantCultureIgnoreCase));
+ }
+
+ public void NotBeginsWith(String value)
+ {
+ ApplyCustomFilter(value.ToString() + "*", XLFilterOperator.NotEqual, s => !((string)s).StartsWith(value.ToString(), StringComparison.InvariantCultureIgnoreCase));
+ }
+
+ public void EndsWith(String value)
+ {
+ ApplyCustomFilter("*" + value.ToString(), XLFilterOperator.Equal, s => ((string)s).EndsWith(value.ToString(), StringComparison.InvariantCultureIgnoreCase));
+ }
+
+ public void NotEndsWith(String value)
+ {
+ ApplyCustomFilter("*" + value.ToString(), XLFilterOperator.NotEqual, s => !((string)s).EndsWith(value.ToString(), StringComparison.InvariantCultureIgnoreCase));
+ }
+
+ public void Contains(String value)
+ {
+ ApplyCustomFilter("*" + value.ToString() + "*", XLFilterOperator.Equal, s => ((string)s).ToLower().Contains(value.ToString().ToLower()));
+ }
+ public void NotContains(String value)
+ {
+ ApplyCustomFilter("*" + value.ToString() + "*", XLFilterOperator.Equal, s => !((string)s).ToLower().Contains(value.ToString().ToLower()));
+ }
+
+ private void ApplyCustomFilter(T value, XLFilterOperator op, Func
+
+
+
+
diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/SortExample.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/SortExample.cs
index 575b653..9569b72 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/SortExample.cs
+++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/SortExample.cs
@@ -71,11 +71,11 @@
var rangeLeftToRight = wsLeftToRight.RangeUsed();
var copyLeftToRight = rangeLeftToRight.CopyTo(wsLeftToRight.Row(wsLeftToRight.LastRowUsed().RowNumber() + 3));
- copyLeftToRight.Sort(XLSortOrientation.LeftToRight);
+ copyLeftToRight.SortLeftToRight();
wsLeftToRight.Row(1).InsertRowsAbove(2);
wsLeftToRight.Cell(1, 1)
- .SetValue(".Sort(XLSortOrientation.LeftToRight) = Sort Range Left to Right, Ascendingly, Ignore Blanks, Ignore Case")
+ .SetValue(".SortLeftToRight() = Sort Range Left to Right, Ascendingly, Ignore Blanks, Ignore Case")
.Style.Font.SetBold();
#endregion
@@ -104,11 +104,11 @@
var rangeComplex1 = wsComplex1.RangeUsed();
var copyComplex1 = rangeComplex1.CopyTo(wsComplex1.Column(wsComplex1.LastColumnUsed().ColumnNumber() + 3));
- copyComplex1.Sort("2, 1 DESC", true);
+ copyComplex1.Sort("2, 1 DESC", XLSortOrder.Ascending, true);
wsComplex1.Row(1).InsertRowsAbove(2);
wsComplex1.Cell(1, 1)
- .SetValue(".Sort(\"2, 1 DESC\", true) = Sort Range Top to Bottom, Col 2 Asc, Col 1 Desc, Ignore Blanks, Match Case").Style.Font.SetBold();
+ .SetValue(".Sort(\"2, 1 DESC\", XLSortOrder.Ascending, true) = Sort Range Top to Bottom, Col 2 Asc, Col 1 Desc, Ignore Blanks, Match Case").Style.Font.SetBold();
#endregion
#region Sort a simple column
@@ -117,7 +117,7 @@
var rangeSimpleColumn = wsSimpleColumn.RangeUsed();
var copySimpleColumn = rangeSimpleColumn.CopyTo(wsSimpleColumn.Column(wsSimpleColumn.LastColumnUsed().ColumnNumber() + 3));
- copySimpleColumn.Sort(XLSortOrder.Descending, true);
+ copySimpleColumn.FirstColumn().Sort(XLSortOrder.Descending, true);
wsSimpleColumn.Row(1).InsertRowsAbove(2);
wsSimpleColumn.Cell(1, 1)
diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/Sorting.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/Sorting.cs
index 0fa398c..4d24204 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/Sorting.cs
+++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/Sorting.cs
@@ -145,7 +145,7 @@
var wsSimpleDesc = wb.Worksheets.Add("Simple Desc");
AddTestTable(wsSimpleDesc);
- wsSimpleDesc.Sort(XLSortOrder.Descending);
+ wsSimpleDesc.Sort("", XLSortOrder.Descending);
var wsSimpleColumns = wb.Worksheets.Add("Simple Columns");
AddTestTable(wsSimpleColumns);
@@ -157,7 +157,7 @@
var wsSimpleColumnDesc = wb.Worksheets.Add("Simple Column Desc");
AddTestColumn(wsSimpleColumnDesc);
- wsSimpleColumnDesc.Sort(XLSortOrder.Descending);
+ wsSimpleColumnDesc.Sort(1, XLSortOrder.Descending);
#endregion
wb.SaveAs(filePath);
diff --git a/ClosedXML/ClosedXML/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj b/ClosedXML/ClosedXML/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj
index d8859e6..d4fe958 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj
+++ b/ClosedXML/ClosedXML/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj
@@ -124,6 +124,42 @@
ExcelHelper.cs
+
+ Excel\AutoFilters\IXLAutoFilter.cs
+
+
+ Excel\AutoFilters\IXLBaseAutoFilter.cs
+
+
+ Excel\AutoFilters\IXLCustomFilteredColumn.cs
+
+
+ Excel\AutoFilters\IXLFilterColumn.cs
+
+
+ Excel\AutoFilters\IXLFilterConnector.cs
+
+
+ Excel\AutoFilters\IXLFilteredColumn.cs
+
+
+ Excel\AutoFilters\XLAutoFilter.cs
+
+
+ Excel\AutoFilters\XLCustomFilteredColumn.cs
+
+
+ Excel\AutoFilters\XLFilter.cs
+
+
+ Excel\AutoFilters\XLFilterColumn.cs
+
+
+ Excel\AutoFilters\XLFilterConnector.cs
+
+
+ Excel\AutoFilters\XLFilteredColumn.cs
+
Excel\Cells\IXLCell.cs
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj
index e42c7cc..4778098 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj
@@ -65,6 +65,7 @@
+
@@ -196,6 +197,10 @@
+
+
+
+
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Examples/AutoFilterTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Examples/AutoFilterTests.cs
new file mode 100644
index 0000000..da3c747
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Examples/AutoFilterTests.cs
@@ -0,0 +1,33 @@
+using ClosedXML_Examples;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace ClosedXML_Tests.Examples
+{
+ [TestClass]
+ public class AutoFilterTests
+ {
+
+ [TestMethod]
+ public void RegularAutoFilter()
+ {
+ TestHelper.RunTestExample(@"AutoFilter\RegularAutoFilter.xlsx");
+ }
+ [TestMethod]
+ public void CustomAutoFilter()
+ {
+ TestHelper.RunTestExample(@"AutoFilter\CustomAutoFilter.xlsx");
+ }
+
+ [TestMethod]
+ public void TopBottomAutoFilter()
+ {
+ TestHelper.RunTestExample(@"AutoFilter\TopBottomAutoFilter.xlsx");
+ }
+
+ [TestMethod]
+ public void DynamicAutoFilter()
+ {
+ TestHelper.RunTestExample(@"AutoFilter\DynamicAutoFilter.xlsx");
+ }
+ }
+}
\ No newline at end of file
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/CustomAutoFilter.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/CustomAutoFilter.xlsx
new file mode 100644
index 0000000..facf59d
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/CustomAutoFilter.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/DynamicAutoFilter.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/DynamicAutoFilter.xlsx
new file mode 100644
index 0000000..5ec35d5
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/DynamicAutoFilter.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/RegularAutoFilter.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/RegularAutoFilter.xlsx
new file mode 100644
index 0000000..8648a38
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/RegularAutoFilter.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/TopBottomAutoFilter.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/TopBottomAutoFilter.xlsx
new file mode 100644
index 0000000..0154726
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/AutoFilter/TopBottomAutoFilter.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/AutoFilter.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/AutoFilter.xlsx
index 29c8ee4..8bc8259 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/AutoFilter.xlsx
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/AutoFilter.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/WorkbookProperties.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/WorkbookProperties.xlsx
index ea8b1dd..a40f5c4 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/WorkbookProperties.xlsx
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/WorkbookProperties.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/SortExample.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/SortExample.xlsx
index c7eb377..e472a17 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/SortExample.xlsx
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/SortExample.xlsx
Binary files differ
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/Sorting.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/Sorting.xlsx
index c02f271..cad7541 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/Sorting.xlsx
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/Sorting.xlsx
Binary files differ