diff --git a/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML.csproj
index 8d97801..538ae9a 100644
--- a/ClosedXML/ClosedXML.csproj
+++ b/ClosedXML/ClosedXML.csproj
@@ -5,16 +5,18 @@
7.2
ClosedXML
ClosedXML
- 0.93.0
- Manuel de Leon, Amir Ghezelbash, Francois Botha, Aleksei Pankratev
+ 0.94.0
+ Francois Botha, Aleksei Pankratev, Manuel de Leon, Amir Ghezelbash
+ Francois Botha, Aleksei Pankratev
ClosedXML
See https://github.com/ClosedXML/ClosedXML/releases/tag/$(productVersion)
- ClosedXML makes it easier for developers to create Excel 2007+ (.xlsx, .xlsm, etc) files. It provides a nice object oriented way to manipulate the files (similar to VBA) without dealing with the hassles of XML Documents. It can be used by any .NET language like C# and VisualBasic.NET.
+ ClosedXML is a .NET library for reading, manipulating and writing Excel 2007+ (.xlsx, .xlsm) files. It aims to provide an intuitive and user-friendly interface to dealing with the underlying OpenXML API.
MIT
https://github.com/ClosedXML/ClosedXML/blob/master/LICENSE
https://github.com/ClosedXML/ClosedXML
https://github.com/ClosedXML/ClosedXML
+ https://raw.githubusercontent.com/ClosedXML/ClosedXML/develop/resources/logo/nuget-logo.png
true
$(NoWarn);NU1605;CS1591
true
@@ -22,6 +24,7 @@
+ ClosedXML.Signed
bin\Release.Signed\
true
true
@@ -59,10 +62,6 @@
-
-
-
-
diff --git a/ClosedXML/ClosedXML.nuspec b/ClosedXML/ClosedXML.nuspec
index 07006ea..f065911 100644
--- a/ClosedXML/ClosedXML.nuspec
+++ b/ClosedXML/ClosedXML.nuspec
@@ -6,7 +6,7 @@
$title$
$author$
$author$
- ClosedXML makes it easier for developers to create Excel 2007+ (.xlsx, .xlsm, etc) files. It provides a nice object oriented way to manipulate the files (similar to VBA) without dealing with the hassles of XML Documents. It can be used by any .NET language like C# and VisualBasic.NET.
+ ClosedXML is a .NET library for reading, manipulating and writing Excel 2007+ (.xlsx, .xlsm) files. It aims to provide an intuitive and user-friendly interface to dealing with the underlying OpenXML API.
https://github.com/ClosedXML/ClosedXML/blob/master/LICENSE
https://github.com/ClosedXML/ClosedXML
false
diff --git a/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs b/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs
index 99445b7..b848f47 100644
--- a/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs
+++ b/ClosedXML/Excel/AutoFilters/IXLAutoFilter.cs
@@ -1,16 +1,33 @@
+// Keep this file CodeMaid organised and cleaned
using System;
+using System.Collections.Generic;
+
namespace ClosedXML.Excel
{
- using System.Collections.Generic;
+ public enum XLFilterDynamicType { AboveAverage, BelowAverage }
+
+ public enum XLFilterType { Regular, Custom, TopBottom, Dynamic, DateTimeGrouping }
+
+ public enum XLTopBottomPart { Top, Bottom }
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 Enabled { get; set; }
+ IEnumerable HiddenRows { get; }
+ IXLRange Range { get; set; }
+ Int32 SortColumn { get; set; }
Boolean Sorted { get; set; }
XLSortOrder SortOrder { get; set; }
- Int32 SortColumn { get; set; }
+ IEnumerable VisibleRows { get; }
+
+ IXLAutoFilter Clear();
+
+ IXLFilterColumn Column(String column);
+
+ IXLFilterColumn Column(Int32 column);
+
+ IXLAutoFilter Reapply();
+
+ IXLAutoFilter Sort(Int32 columnToSortBy = 1, XLSortOrder sortOrder = XLSortOrder.Ascending, Boolean matchCase = false, Boolean ignoreBlanks = true);
}
}
diff --git a/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs b/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs
deleted file mode 100644
index 4f2851d..0000000
--- a/ClosedXML/Excel/AutoFilters/IXLBaseAutoFilter.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-
-namespace ClosedXML.Excel
-{
- public enum XLFilterType { Regular, Custom, TopBottom, Dynamic, DateTimeGrouping }
-
- 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; }
- }
-}
diff --git a/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs b/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs
index 84a54a8..f994fff 100644
--- a/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs
+++ b/ClosedXML/Excel/AutoFilters/XLAutoFilter.cs
@@ -1,3 +1,4 @@
+// Keep this file CodeMaid organised and cleaned
using System;
using System.Linq;
@@ -5,7 +6,7 @@
{
using System.Collections.Generic;
- internal class XLAutoFilter : IXLBaseAutoFilter, IXLAutoFilter
+ internal class XLAutoFilter : IXLAutoFilter
{
private readonly Dictionary _columns = new Dictionary();
@@ -18,39 +19,19 @@
#region IXLAutoFilter Members
- IXLAutoFilter IXLAutoFilter.Sort(Int32 columnToSortBy, XLSortOrder sortOrder, Boolean matchCase,
- Boolean ignoreBlanks)
- {
- return Sort(columnToSortBy, sortOrder, matchCase, ignoreBlanks);
- }
-
- #endregion
-
- #region IXLBaseAutoFilter Members
-
public Boolean Enabled { get; set; }
+ public IEnumerable HiddenRows { get => Range.Rows(r => r.WorksheetRow().IsHidden); }
public IXLRange Range { get; set; }
+ public Int32 SortColumn { get; set; }
+ public Boolean Sorted { get; set; }
+ public XLSortOrder SortOrder { get; set; }
+ public IEnumerable VisibleRows { get => Range.Rows(r => !r.WorksheetRow().IsHidden); }
- IXLBaseAutoFilter IXLBaseAutoFilter.Clear()
+ IXLAutoFilter IXLAutoFilter.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)
{
var columnNumber = XLHelper.GetColumnNumberFromLetter(column);
@@ -74,39 +55,10 @@
return filterColumn;
}
- #endregion
-
- public XLAutoFilter Set(IXLRangeBase range)
+ public IXLAutoFilter Reapply()
{
- 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 InvalidOperationException("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;
// Recalculate shown / hidden rows
var rows = Range.Rows(2, Range.RowCount());
@@ -167,5 +119,52 @@
ws.ResumeEvents();
return this;
}
+
+ IXLAutoFilter IXLAutoFilter.Sort(Int32 columnToSortBy, XLSortOrder sortOrder, Boolean matchCase,
+ Boolean ignoreBlanks)
+ {
+ return Sort(columnToSortBy, sortOrder, matchCase, ignoreBlanks);
+ }
+
+ #endregion IXLAutoFilter Members
+
+ 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 Set(IXLRangeBase range)
+ {
+ Range = range.AsRange();
+ Enabled = true;
+ return this;
+ }
+
+ public XLAutoFilter Sort(Int32 columnToSortBy, XLSortOrder sortOrder, Boolean matchCase, Boolean ignoreBlanks)
+ {
+ if (!Enabled)
+ throw new InvalidOperationException("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;
+
+ ws.ResumeEvents();
+
+ Reapply();
+
+ return this;
+ }
}
}
diff --git a/ClosedXML/Excel/AutoFilters/XLFilter.cs b/ClosedXML/Excel/AutoFilters/XLFilter.cs
index e62c552..42ac112 100644
--- a/ClosedXML/Excel/AutoFilters/XLFilter.cs
+++ b/ClosedXML/Excel/AutoFilters/XLFilter.cs
@@ -1,12 +1,12 @@
+// Keep this file CodeMaid organised and cleaned
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
namespace ClosedXML.Excel
{
internal enum XLConnector { And, Or }
+
internal enum XLFilterOperator { Equal, NotEqual, GreaterThan, LessThan, EqualOrGreaterThan, EqualOrLessThan }
+
internal class XLFilter
{
public XLFilter(XLFilterOperator op = XLFilterOperator.Equal)
@@ -14,10 +14,10 @@
Operator = op;
}
+ public Func