diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCell.cs index 5ce3c52..4edb936 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCell.cs @@ -264,5 +264,7 @@ IXLRow WorksheetRow(); Boolean HasDataValidation { get; } + + void Select(); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCells.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCells.cs index 890024c..d2eefe9 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCells.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/IXLCells.cs @@ -55,6 +55,6 @@ IXLStyle Style { get; set; } - + void Select(); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index d697bd8..c9ff988 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -2271,5 +2271,10 @@ { return DataValidation; } + + public void Select() + { + AsRange().Select(); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs index 047fb91..d768af2 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs @@ -273,5 +273,21 @@ } #endregion + + public void Select() + { + var worksheets = new HashSet(); + foreach (var range in this) + { + var worksheet = range.Worksheet as XLWorksheet; + if (!worksheets.Contains(worksheet)) + { + worksheet.SelectedRanges = new XLRanges(); + worksheets.Add(worksheet); + } + + worksheet.SelectedRanges.Add(range); + } + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumns.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumns.cs index 9eef5b1..bb23287 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumns.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumns.cs @@ -119,5 +119,7 @@ /// /// Specify what you want to clear. IXLColumns Clear(XLClearOptions clearOptions = XLClearOptions.ContentsAndFormats); + + void Select(); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs index 56d08d1..e089e32 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs @@ -279,5 +279,10 @@ if (_columns != null) _columns.ForEach(c => c.Dispose()); } + + public void Select() + { + XLHelper.AddSelection(this); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs index c063fba..a15cc8e 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs @@ -361,5 +361,7 @@ IXLRanges MergedRanges { get; } IXLConditionalFormats ConditionalFormats { get; } + + IXLRanges SelectedRanges { get; } } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeBase.cs index 6601043..f22eec4 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeBase.cs @@ -241,5 +241,7 @@ IXLDataValidation SetDataValidation(); IXLConditionalFormat AddConditionalFormat(); + + void Select(); } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeColumns.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeColumns.cs index 7d7c7e2..90faa05 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeColumns.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeColumns.cs @@ -42,5 +42,7 @@ /// /// Specify what you want to clear. IXLRangeColumns Clear(XLClearOptions clearOptions = XLClearOptions.ContentsAndFormats); + + void Select(); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeRows.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeRows.cs index d52638f..5c8d0c4 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeRows.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeRows.cs @@ -41,5 +41,7 @@ /// /// Specify what you want to clear. IXLRangeRows Clear(XLClearOptions clearOptions = XLClearOptions.ContentsAndFormats); + + void Select(); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs index 2a2458c..f73e201 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs @@ -89,5 +89,7 @@ /// /// Specify what you want to clear. IXLRanges Clear(XLClearOptions clearOptions = XLClearOptions.ContentsAndFormats); + + void Select(); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs index 3cd5b80..14b6c0e 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -1888,5 +1888,10 @@ return cf; } } + + public void Select() + { + Worksheet.SelectedRanges = new XLRanges {this}; + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumns.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumns.cs index 18ad52a..846b00a 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumns.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumns.cs @@ -137,5 +137,10 @@ if (_ranges != null) _ranges.ForEach(r => r.Dispose()); } + + public void Select() + { + XLHelper.AddSelection(this); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRows.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRows.cs index 09eb0c2..a87f931 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRows.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRows.cs @@ -138,5 +138,10 @@ _ranges.ForEach(r => r.Dispose()); } + public void Select() + { + XLHelper.AddSelection(this); + } + } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs index 266d999..8ce3f40 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs @@ -231,5 +231,10 @@ { return DataValidation; } + + public void Select() + { + XLHelper.AddSelection(this); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs index 834a87b..fd5a1ca 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs @@ -119,5 +119,7 @@ /// /// Specify what you want to clear. IXLRows Clear(XLClearOptions clearOptions = XLClearOptions.ContentsAndFormats); + + void Select(); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs index 1c8deb3..b896bed 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs @@ -270,5 +270,10 @@ if (_rows != null) _rows.ForEach(r => r.Dispose()); } + + public void Select() + { + XLHelper.AddSelection(this); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/IXLTableRows.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/IXLTableRows.cs index f0d2ce5..fea7075 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/IXLTableRows.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/IXLTableRows.cs @@ -34,5 +34,7 @@ /// /// Specify what you want to clear. IXLTableRows Clear(XLClearOptions clearOptions = XLClearOptions.ContentsAndFormats); + + void Select(); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTableRows.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTableRows.cs index fdb1cb7..7c436be 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTableRows.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTableRows.cs @@ -119,5 +119,10 @@ } #endregion + + public void Select() + { + XLHelper.AddSelection(this); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index 685b1a6..12892f1 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -1576,6 +1576,15 @@ if (sheetView.ShowZeros != null) ws.ShowZeros = sheetView.ShowZeros.Value; if (sheetView.TabSelected != null) ws.TabSelected = sheetView.TabSelected.Value; + var selection = sheetView.Elements().FirstOrDefault(); + if (selection != null) + { + if (selection.SequenceOfReferences != null) + ws.Ranges(selection.SequenceOfReferences.InnerText.Replace(" ", ",")).Select(); + else if (selection.ActiveCell != null) + ws.Cell(selection.ActiveCell).Select(); + } + var pane = sheetView.Elements().FirstOrDefault(); if (pane == null) return; @@ -1587,6 +1596,7 @@ ws.SheetView.SplitColumn = (Int32) pane.HorizontalSplit.Value; if (pane.VerticalSplit != null) ws.SheetView.SplitRow = (Int32) pane.VerticalSplit.Value; + } private void SetProperties(SpreadsheetDocument dSpreadsheet) diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index 9253267..c621695 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -2547,6 +2547,19 @@ sheetView.TabSelected = xlWorksheet.TabSelected; + if (xlWorksheet.SelectedRanges != null && xlWorksheet.SelectedRanges.Any()) + { + sheetView.RemoveAllChildren(); + var sb = new StringBuilder(); + foreach (var range in xlWorksheet.SelectedRanges) + { + sb.Append(range.RangeAddress.ToStringRelative(false)); + sb.Append(" "); + } + var selection = new Selection { ActiveCell = xlWorksheet.SelectedRanges.First().FirstCell().Address.ToStringRelative(false) ,SequenceOfReferences = new ListValue { InnerText = sb.ToString().TrimEnd() } }; + sheetView.Append(selection); + } + if (xlWorksheet.ShowFormulas) sheetView.ShowFormulas = true; else diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index 4748be5..17e8163 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -1381,14 +1381,9 @@ { EventTrackingEnabled = _eventTracking; } - //public new Int32 RowCount() - //{ - // return XLHelper.MaxRowNumber; - //} - //public new Int32 ColumnCount() - //{ - // return XLHelper.MaxColumnNumber; - //} + + + public IXLRanges SelectedRanges { get; internal set; } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/ExcelHelper.cs b/ClosedXML/ClosedXML/ClosedXML/ExcelHelper.cs index 4a84b09..00ee206 100644 --- a/ClosedXML/ClosedXML/ClosedXML/ExcelHelper.cs +++ b/ClosedXML/ClosedXML/ClosedXML/ExcelHelper.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Globalization; using System.Runtime.CompilerServices; using System.Text; @@ -246,5 +247,21 @@ return rows; } + + public static void AddSelection(IEnumerable items) where T: IXLRangeBase + { + var worksheets = new HashSet(); + foreach (var range in items) + { + var worksheet = range.Worksheet as XLWorksheet; + if (!worksheets.Contains(worksheet)) + { + worksheet.SelectedRanges = new XLRanges(); + worksheets.Add(worksheet); + } + + worksheet.SelectedRanges.Add(range); + } + } } } \ No newline at end of file