diff --git a/.gitattributes b/.gitattributes
index 5b587f0..68cc179 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -4,8 +4,7 @@
# Explicitly declare text files we want to always be normalized and converted
# to native line endings on checkout.
-*.c text
-*.h text
+*.cs text diff=csharp eol=crlf
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
@@ -16,5 +15,6 @@
*.dll binary
*.gif binary
*.ico binary
+*.xlsx binary
core.autocrlf=true
diff --git a/.gitignore b/.gitignore
index 14f56ef..3a8d055 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,7 @@
*.cache
*.ilk
*.log
+.vs/
[Bb]in
[Dd]ebug*/
*.lib
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/CONTRIBUTING.md
diff --git a/ClosedXML/AttributeExtensions.cs b/ClosedXML/AttributeExtensions.cs
index 89b8b7f..be35455 100644
--- a/ClosedXML/AttributeExtensions.cs
+++ b/ClosedXML/AttributeExtensions.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
diff --git a/ClosedXML/Attributes/XLColumnAttribute.cs b/ClosedXML/Attributes/XLColumnAttribute.cs
index 0d33214..41b541b 100644
--- a/ClosedXML/Attributes/XLColumnAttribute.cs
+++ b/ClosedXML/Attributes/XLColumnAttribute.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using ClosedXML;
diff --git a/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML.csproj
index 0539fcd..7de9988 100644
--- a/ClosedXML/ClosedXML.csproj
+++ b/ClosedXML/ClosedXML.csproj
@@ -46,8 +46,8 @@
ClosedXML.snk
-
- ..\packages\DocumentFormat.OpenXml.2.7.1\lib\net45\DocumentFormat.OpenXml.dll
+
+ ..\packages\DocumentFormat.OpenXml.2.7.2\lib\net40\DocumentFormat.OpenXml.dll
True
@@ -72,14 +72,19 @@
+
+
+
+
+
@@ -337,7 +342,9 @@
.editorconfig
-
+
+ Designer
+
-
+
\ No newline at end of file
diff --git a/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs b/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs
index 8859848..e1a87a7 100644
--- a/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs
+++ b/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs
@@ -1,16 +1,16 @@
-using System;
-namespace ClosedXML.Excel
-{
- using System.Collections.Generic;
-
- public interface IXLAutoFilter: IDisposable
- {
- 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; }
- }
+using System;
+namespace ClosedXML.Excel
+{
+ using System.Collections.Generic;
+
+ public interface IXLAutoFilter: IDisposable
+ {
+ 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; }
+ }
}
\ No newline at end of file
diff --git a/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs b/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs
index b3f8d66..88ca907 100644
--- a/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs
+++ b/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs
@@ -1,25 +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; }
-
-
- }
+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/Excel/AutoFilters/IXLCustomFilteredColumn.cs b/ClosedXML/Excel/AutoFilters/IXLCustomFilteredColumn.cs
index 85cec03..37c6a17 100644
--- a/ClosedXML/Excel/AutoFilters/IXLCustomFilteredColumn.cs
+++ b/ClosedXML/Excel/AutoFilters/IXLCustomFilteredColumn.cs
@@ -1,19 +1,19 @@
-using System;
-namespace ClosedXML.Excel
-{
- 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);
- }
+using System;
+namespace ClosedXML.Excel
+{
+ 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/Excel/AutoFilters/IXLFilterColumn.cs b/ClosedXML/Excel/AutoFilters/IXLFilterColumn.cs
index 159faf9..41376c8 100644
--- a/ClosedXML/Excel/AutoFilters/IXLFilterColumn.cs
+++ b/ClosedXML/Excel/AutoFilters/IXLFilterColumn.cs
@@ -1,46 +1,46 @@
-using System;
-namespace ClosedXML.Excel
-{
- 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; }
-
- IXLFilterColumn SetFilterType(XLFilterType value);
- IXLFilterColumn SetTopBottomValue(Int32 value);
- IXLFilterColumn SetTopBottomType(XLTopBottomType value);
- IXLFilterColumn SetTopBottomPart(XLTopBottomPart value);
- IXLFilterColumn SetDynamicType(XLFilterDynamicType value);
- IXLFilterColumn SetDynamicValue(Double value);
-
- }
+using System;
+namespace ClosedXML.Excel
+{
+ 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; }
+
+ IXLFilterColumn SetFilterType(XLFilterType value);
+ IXLFilterColumn SetTopBottomValue(Int32 value);
+ IXLFilterColumn SetTopBottomType(XLTopBottomType value);
+ IXLFilterColumn SetTopBottomPart(XLTopBottomPart value);
+ IXLFilterColumn SetDynamicType(XLFilterDynamicType value);
+ IXLFilterColumn SetDynamicValue(Double value);
+
+ }
}
\ No newline at end of file
diff --git a/ClosedXML/Excel/AutoFilters/IXLFilterConnector.cs b/ClosedXML/Excel/AutoFilters/IXLFilterConnector.cs
index 7955869..d5d52be 100644
--- a/ClosedXML/Excel/AutoFilters/IXLFilterConnector.cs
+++ b/ClosedXML/Excel/AutoFilters/IXLFilterConnector.cs
@@ -1,10 +1,10 @@
-using System;
-
-namespace ClosedXML.Excel
-{
- public interface IXLFilterConnector
- {
- IXLCustomFilteredColumn And { get; }
- IXLCustomFilteredColumn Or { get; }
- }
-}
+using System;
+
+namespace ClosedXML.Excel
+{
+ public interface IXLFilterConnector
+ {
+ IXLCustomFilteredColumn And { get; }
+ IXLCustomFilteredColumn Or { get; }
+ }
+}
diff --git a/ClosedXML/Excel/AutoFilters/IXLFilteredColumn.cs b/ClosedXML/Excel/AutoFilters/IXLFilteredColumn.cs
index 6491f55..86db9db 100644
--- a/ClosedXML/Excel/AutoFilters/IXLFilteredColumn.cs
+++ b/ClosedXML/Excel/AutoFilters/IXLFilteredColumn.cs
@@ -1,8 +1,8 @@
-using System;
-namespace ClosedXML.Excel
-{
- public interface IXLFilteredColumn
- {
- IXLFilteredColumn AddFilter(T value) where T : IComparable;
- }
+using System;
+namespace ClosedXML.Excel
+{
+ public interface IXLFilteredColumn
+ {
+ IXLFilteredColumn AddFilter(T value) where T : IComparable;
+ }
}
\ No newline at end of file
diff --git a/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs b/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs
index 28f4209..dcf4b76 100644
--- a/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs
+++ b/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs
@@ -1,165 +1,165 @@
-using System;
-using System.Linq;
-
-namespace ClosedXML.Excel
-{
- using System.Collections.Generic;
-
- internal class XLAutoFilter : IXLBaseAutoFilter, IXLAutoFilter
- {
- private readonly Dictionary _columns = new Dictionary();
-
- public XLAutoFilter()
- {
- Filters = new Dictionary>();
- }
-
- public Dictionary> Filters { get; private set; }
-
- #region IXLAutoFilter Members
-
- IXLAutoFilter IXLAutoFilter.Sort(Int32 columnToSortBy, XLSortOrder sortOrder, Boolean matchCase,
- Boolean ignoreBlanks)
- {
- return Sort(columnToSortBy, sortOrder, matchCase, ignoreBlanks);
- }
-
- public void Dispose()
- {
- if (Range != null)
- Range.Dispose();
- }
-
- #endregion
-
- #region IXLBaseAutoFilter Members
-
- public Boolean Enabled { get; set; }
- public IXLRange Range { get; set; }
-
- IXLBaseAutoFilter IXLBaseAutoFilter.Clear()
- {
- return Clear();
- }
-
- IXLBaseAutoFilter IXLBaseAutoFilter.Set(IXLRangeBase range)
- {
- return Set(range);
- }
-
- 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 IXLFilterColumn Column(String column)
- {
- return Column(XLHelper.GetColumnNumberFromLetter(column));
- }
-
- public IXLFilterColumn Column(Int32 column)
- {
- XLFilterColumn filterColumn;
- if (!_columns.TryGetValue(column, out filterColumn))
- {
- filterColumn = new XLFilterColumn(this, column);
- _columns.Add(column, filterColumn);
- }
-
- return filterColumn;
- }
-
- #endregion
-
- public XLAutoFilter Set(IXLRangeBase range)
- {
- Range = range.AsRange();
- Enabled = true;
- return this;
- }
-
- public XLAutoFilter Clear()
- {
- if (!Enabled) return this;
-
- Enabled = false;
- Filters.Clear();
- foreach (IXLRangeRow row in Range.Rows().Where(r => r.RowNumber() > 1))
- row.WorksheetRow().Unhide();
- return this;
- }
-
- public XLAutoFilter Sort(Int32 columnToSortBy, XLSortOrder sortOrder, Boolean matchCase, Boolean ignoreBlanks)
- {
- if (!Enabled)
- throw new ApplicationException("Filter has not been enabled.");
-
- var ws = Range.Worksheet as XLWorksheet;
- ws.SuspendEvents();
- Range.Range(Range.FirstCell().CellBelow(), Range.LastCell()).Sort(columnToSortBy, sortOrder, matchCase,
- ignoreBlanks);
-
- Sorted = true;
- SortOrder = sortOrder;
- SortColumn = columnToSortBy;
-
- if (Enabled)
- {
- using (var rows = Range.Rows(2, Range.RowCount()))
- {
- foreach (IXLRangeRow row in rows)
- row.WorksheetRow().Unhide();
- }
-
- foreach (KeyValuePair> kp in Filters)
- {
- Boolean firstFilter = true;
- foreach (XLFilter filter in kp.Value)
- {
- Boolean isText = filter.Value is String;
- using (var rows = Range.Rows(2, Range.RowCount()))
- {
- foreach (IXLRangeRow row in rows)
- {
- 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;
- }
- }
- }
- }
- ws.ResumeEvents();
- return this;
- }
- }
+using System;
+using System.Linq;
+
+namespace ClosedXML.Excel
+{
+ using System.Collections.Generic;
+
+ internal class XLAutoFilter : IXLBaseAutoFilter, IXLAutoFilter
+ {
+ private readonly Dictionary _columns = new Dictionary();
+
+ public XLAutoFilter()
+ {
+ Filters = new Dictionary>();
+ }
+
+ public Dictionary> Filters { get; private set; }
+
+ #region IXLAutoFilter Members
+
+ IXLAutoFilter IXLAutoFilter.Sort(Int32 columnToSortBy, XLSortOrder sortOrder, Boolean matchCase,
+ Boolean ignoreBlanks)
+ {
+ return Sort(columnToSortBy, sortOrder, matchCase, ignoreBlanks);
+ }
+
+ public void Dispose()
+ {
+ if (Range != null)
+ Range.Dispose();
+ }
+
+ #endregion
+
+ #region IXLBaseAutoFilter Members
+
+ public Boolean Enabled { get; set; }
+ public IXLRange Range { get; set; }
+
+ IXLBaseAutoFilter IXLBaseAutoFilter.Clear()
+ {
+ return Clear();
+ }
+
+ IXLBaseAutoFilter IXLBaseAutoFilter.Set(IXLRangeBase range)
+ {
+ return Set(range);
+ }
+
+ 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 IXLFilterColumn Column(String column)
+ {
+ return Column(XLHelper.GetColumnNumberFromLetter(column));
+ }
+
+ public IXLFilterColumn Column(Int32 column)
+ {
+ XLFilterColumn filterColumn;
+ if (!_columns.TryGetValue(column, out filterColumn))
+ {
+ filterColumn = new XLFilterColumn(this, column);
+ _columns.Add(column, filterColumn);
+ }
+
+ return filterColumn;
+ }
+
+ #endregion
+
+ public XLAutoFilter Set(IXLRangeBase range)
+ {
+ Range = range.AsRange();
+ Enabled = true;
+ return this;
+ }
+
+ public XLAutoFilter Clear()
+ {
+ if (!Enabled) return this;
+
+ Enabled = false;
+ Filters.Clear();
+ foreach (IXLRangeRow row in Range.Rows().Where(r => r.RowNumber() > 1))
+ row.WorksheetRow().Unhide();
+ return this;
+ }
+
+ public XLAutoFilter Sort(Int32 columnToSortBy, XLSortOrder sortOrder, Boolean matchCase, Boolean ignoreBlanks)
+ {
+ if (!Enabled)
+ throw new ApplicationException("Filter has not been enabled.");
+
+ var ws = Range.Worksheet as XLWorksheet;
+ ws.SuspendEvents();
+ Range.Range(Range.FirstCell().CellBelow(), Range.LastCell()).Sort(columnToSortBy, sortOrder, matchCase,
+ ignoreBlanks);
+
+ Sorted = true;
+ SortOrder = sortOrder;
+ SortColumn = columnToSortBy;
+
+ if (Enabled)
+ {
+ using (var rows = Range.Rows(2, Range.RowCount()))
+ {
+ foreach (IXLRangeRow row in rows)
+ row.WorksheetRow().Unhide();
+ }
+
+ foreach (KeyValuePair> kp in Filters)
+ {
+ Boolean firstFilter = true;
+ foreach (XLFilter filter in kp.Value)
+ {
+ Boolean isText = filter.Value is String;
+ using (var rows = Range.Rows(2, Range.RowCount()))
+ {
+ foreach (IXLRangeRow row in rows)
+ {
+ 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;
+ }
+ }
+ }
+ }
+ ws.ResumeEvents();
+ return this;
+ }
+ }
}
\ No newline at end of file
diff --git a/ClosedXML/Excel/AutoFilters/XLCustomFilteredColumn.cs b/ClosedXML/Excel/AutoFilters/XLCustomFilteredColumn.cs
index 26fd585..d2cb44d 100644
--- a/ClosedXML/Excel/AutoFilters/XLCustomFilteredColumn.cs
+++ b/ClosedXML/Excel/AutoFilters/XLCustomFilteredColumn.cs
@@ -1,143 +1,143 @@
-using System;
-using System.Linq;
-
-namespace ClosedXML.Excel
-{
- internal class XLCustomFilteredColumn : IXLCustomFilteredColumn
- {
- private readonly XLAutoFilter _autoFilter;
- private readonly Int32 _column;
- private readonly XLConnector _connector;
-
- public XLCustomFilteredColumn(XLAutoFilter autoFilter, Int32 column, XLConnector connector)
- {
- _autoFilter = autoFilter;
- _column = column;
- _connector = connector;
- }
-
- #region IXLCustomFilteredColumn Members
-
- 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().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().CompareTo(value) != 0);
- }
- }
-
- public void GreaterThan(T value) where T: IComparable
- {
- ApplyCustomFilter(value, XLFilterOperator.GreaterThan,
- v => v.CastTo().CompareTo(value) > 0);
- }
-
- public void LessThan(T value) where T: IComparable
- {
- ApplyCustomFilter(value, XLFilterOperator.LessThan, v => v.CastTo().CompareTo(value) < 0);
- }
-
- public void EqualOrGreaterThan(T value) where T: IComparable
- {
- ApplyCustomFilter(value, XLFilterOperator.EqualOrGreaterThan,
- v => v.CastTo().CompareTo(value) >= 0);
- }
-
- public void EqualOrLessThan(T value) where T: IComparable
- {
- ApplyCustomFilter(value, XLFilterOperator.EqualOrLessThan,
- v => v.CastTo().CompareTo(value) <= 0);
- }
-
- public void BeginsWith(String value)
- {
- ApplyCustomFilter(value + "*", XLFilterOperator.Equal,
- s => ((string)s).StartsWith(value, StringComparison.InvariantCultureIgnoreCase));
- }
-
- public void NotBeginsWith(String value)
- {
- ApplyCustomFilter(value + "*", XLFilterOperator.NotEqual,
- s =>
- !((string)s).StartsWith(value, StringComparison.InvariantCultureIgnoreCase));
- }
-
- public void EndsWith(String value)
- {
- ApplyCustomFilter("*" + value, XLFilterOperator.Equal,
- s => ((string)s).EndsWith(value, StringComparison.InvariantCultureIgnoreCase));
- }
-
- public void NotEndsWith(String value)
- {
- ApplyCustomFilter("*" + value, XLFilterOperator.NotEqual,
- s => !((string)s).EndsWith(value, StringComparison.InvariantCultureIgnoreCase));
- }
-
- public void Contains(String value)
- {
- ApplyCustomFilter("*" + value + "*", XLFilterOperator.Equal,
- s => ((string)s).ToLower().Contains(value.ToLower()));
- }
-
- public void NotContains(String value)
- {
- ApplyCustomFilter("*" + value + "*", XLFilterOperator.Equal,
- s => !((string)s).ToLower().Contains(value.ToLower()));
- }
-
- #endregion
-
- private void ApplyCustomFilter(T value, XLFilterOperator op, Func