diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs index 5725233..5b467ae 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs @@ -184,5 +184,8 @@ /// /// Specify what you want to clear. new IXLColumn Clear(XLClearOptions clearOptions = XLClearOptions.ContentsAndFormats); + + IXLRangeColumn ColumnUsed(Boolean includeFormats = false); + } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs index 5942db6..cca5504 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs @@ -712,5 +712,10 @@ } #endregion + + public IXLRangeColumn ColumnUsed(Boolean includeFormats = false) + { + return Column(FirstCellUsed(includeFormats), LastCellUsed(includeFormats)); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeColumn.cs index c60a326..16ebea1 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeColumn.cs @@ -109,6 +109,8 @@ /// /// Specify what you want to clear. new IXLRangeColumn Clear(XLClearOptions clearOptions = XLClearOptions.ContentsAndFormats); + + IXLRangeColumn ColumnUsed(Boolean includeFormats = false); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeRow.cs index ac4592f..b69a706 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeRow.cs @@ -112,6 +112,8 @@ /// /// Specify what you want to clear. new IXLRangeRow Clear(XLClearOptions clearOptions = XLClearOptions.ContentsAndFormats); + + IXLRangeRow RowUsed(Boolean includeFormats = false); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumn.cs index b245522..513c218 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumn.cs @@ -357,5 +357,10 @@ base.Clear(clearOptions); return this; } + + public IXLRangeColumn ColumnUsed(Boolean includeFormats = false) + { + return Column(FirstCellUsed(includeFormats), LastCellUsed(includeFormats)); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRow.cs index a703a95..077b861 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRow.cs @@ -342,5 +342,10 @@ base.Clear(clearOptions); return this; } + + public IXLRangeRow RowUsed(Boolean includeFormats = false) + { + return Row(FirstCellUsed(includeFormats), LastCellUsed(includeFormats)); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs index 69bd602..39ffec0 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs @@ -187,5 +187,7 @@ /// /// Specify what you want to clear. new IXLRow Clear(XLClearOptions clearOptions = XLClearOptions.ContentsAndFormats); + + IXLRangeRow RowUsed(Boolean includeFormats = false); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs index 70fa176..c9842c1 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs @@ -627,5 +627,10 @@ } #endregion + + public IXLRangeRow RowUsed(Boolean includeFormats = false) + { + return Row(FirstCellUsed(includeFormats), LastCellUsed(includeFormats)); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs index 8c4681f..9379676 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs @@ -594,7 +594,7 @@ { var retVal = new XLRanges(); var rangePairs = namedRanges.Split(','); - foreach (var r in rangePairs.SelectMany(Ranges)) + foreach (var r in rangePairs.Select(s=>Range(s.Trim()))) retVal.Add(r); return retVal; } diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj index a77c372..9f6bf64 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj @@ -70,12 +70,14 @@ + + diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Columns/ColumnsTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Columns/ColumnsTests.cs new file mode 100644 index 0000000..67bf566 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Columns/ColumnsTests.cs @@ -0,0 +1,29 @@ +using ClosedXML.Excel; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace ClosedXML_Tests.Excel +{ + /// + /// Summary description for UnitTest1 + /// + [TestClass] + public class ColumnTests + { + + [TestMethod] + public void ColumnUsed() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet1"); + ws.Cell(2, 1).SetValue("Test"); + ws.Cell(3, 1).SetValue("Test"); + + var fromColumn = ws.Column(1).ColumnUsed(); + Assert.AreEqual("A2:A3", fromColumn.RangeAddress.ToStringRelative()); + + var fromRange = ws.Range("A1:A5").FirstColumn().ColumnUsed(); + Assert.AreEqual("A2:A3", fromRange.RangeAddress.ToStringRelative()); + } + + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Rows/RowsTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Rows/RowsTests.cs new file mode 100644 index 0000000..ca96498 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Rows/RowsTests.cs @@ -0,0 +1,29 @@ +using ClosedXML.Excel; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace ClosedXML_Tests.Excel +{ + /// + /// Summary description for UnitTest1 + /// + [TestClass] + public class RowTests + { + + [TestMethod] + public void RowUsed() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet1"); + ws.Cell(1, 2).SetValue("Test"); + ws.Cell(1, 3).SetValue("Test"); + + var fromRow = ws.Row(1).RowUsed(); + Assert.AreEqual("B1:C1", fromRow.RangeAddress.ToStringRelative()); + + var fromRange = ws.Range("A1:E1").FirstRow().RowUsed(); + Assert.AreEqual("B1:C1", fromRange.RangeAddress.ToStringRelative()); + } + + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Columns/InsertColumns.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Columns/InsertColumns.xlsx index 432af55..8bdd923 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Columns/InsertColumns.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Columns/InsertColumns.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/CurrentRowColumn.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/CurrentRowColumn.xlsx index d0bb839..0e274f3 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/CurrentRowColumn.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/CurrentRowColumn.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Rows/InsertRows.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Rows/InsertRows.xlsx index 92138e3..7cbf7d4 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Rows/InsertRows.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Rows/InsertRows.xlsx Binary files differ