diff --git a/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/Excel/XLWorkbook_Save.cs index 9ed0b88..37d38ba 100644 --- a/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/Excel/XLWorkbook_Save.cs @@ -2034,7 +2034,6 @@ && cell.Address.RowNumber > source.FirstRow().RowNumber() && cell.IsEmpty()).Any(); - if (types.Length == 1 && types.Single() == XLDataType.Number) { sharedItems.ContainsSemiMixedTypes = false; @@ -4278,30 +4277,57 @@ pane.HorizontalSplit = hSplit; pane.VerticalSplit = ySplit; + pane.ActivePane = (ySplit == 0 ? PaneValues.TopRight : 0) + | (hSplit == 0 ? PaneValues.BottomLeft : 0); + pane.TopLeftCell = XLHelper.GetColumnLetterFromNumber(xlWorksheet.SheetView.SplitColumn + 1) + (xlWorksheet.SheetView.SplitRow + 1); if (hSplit == 0 && ySplit == 0) + { + pane = null; sheetView.RemoveAllChildren(); + } + else + sheetView.TopLeftCell = null; if (xlWorksheet.SelectedRanges.Any() || xlWorksheet.ActiveCell != null) { sheetView.RemoveAllChildren(); var firstSelection = xlWorksheet.SelectedRanges.FirstOrDefault(); - var selection = new Selection(); - if (xlWorksheet.ActiveCell != null) - selection.ActiveCell = xlWorksheet.ActiveCell.Address.ToStringRelative(false); - else if (firstSelection != null) - selection.ActiveCell = firstSelection.RangeAddress.FirstAddress.ToStringRelative(false); - var seqRef = new List { selection.ActiveCell.Value }; - seqRef.AddRange(xlWorksheet.SelectedRanges - .Select(range => range.RangeAddress.ToStringRelative(false))); + Action populateSelection = (Selection selection) => + { + if (xlWorksheet.ActiveCell != null) + selection.ActiveCell = xlWorksheet.ActiveCell.Address.ToStringRelative(false); + else if (firstSelection != null) + selection.ActiveCell = firstSelection.RangeAddress.FirstAddress.ToStringRelative(false); - selection.SequenceOfReferences = new ListValue { InnerText = String.Join(" ", seqRef.Distinct().ToArray()) }; + var seqRef = new List { selection.ActiveCell.Value }; + seqRef.AddRange(xlWorksheet.SelectedRanges + .Select(range => + { + if (range.RangeAddress.FirstAddress.Equals(range.RangeAddress.LastAddress)) + return range.RangeAddress.FirstAddress.ToStringRelative(false); + else + return range.RangeAddress.ToStringRelative(false); + })); - sheetView.Append(selection); + selection.SequenceOfReferences = new ListValue { InnerText = String.Join(" ", seqRef.Distinct().ToArray()) }; + + sheetView.Append(selection); + }; + + populateSelection(new Selection()); + // If a pane exists, we need to set the active pane too + if (pane != null) + { + populateSelection(new Selection() + { + Pane = pane.ActivePane + }); + } } if (xlWorksheet.SheetView.ZoomScale == 100) diff --git a/ClosedXML_Examples/Misc/FreezePanes.cs b/ClosedXML_Examples/Misc/FreezePanes.cs index 2fd9465..d831af3 100644 --- a/ClosedXML_Examples/Misc/FreezePanes.cs +++ b/ClosedXML_Examples/Misc/FreezePanes.cs @@ -1,72 +1,36 @@ -using System; using ClosedXML.Excel; - +using System; namespace ClosedXML_Examples.Misc { public class FreezePanes : IXLExample { - #region Variables - - // Public - - // Private - - - #endregion - - #region Properties - - // Public - - // Private - - // Override - - - #endregion - - #region Events - - // Public - - // Private - - // Override - - - #endregion - - #region Methods - - // Public public void Create(String filePath) { - var wb = new XLWorkbook(); - var wsFreeze = wb.Worksheets.Add("Freeze View"); - - // Freeze rows and columns in one shot - wsFreeze.SheetView.Freeze(3, 3); + using (var wb = new XLWorkbook()) + { + // Freeze rows and columns in one shot + var ws1 = wb.AddWorksheet("Freeze1"); + ws1.Cell(5, 5).SetActive(); + ws1.SheetView.Freeze(3, 3); - // You can also be more specific on what you want to freeze - // For example: - // wsFreeze.SheetView.FreezeRows(3); - // wsFreeze.SheetView.FreezeColumns(3); + // You can also be more specific on what you want to freeze + // For example: + var ws2 = wb.AddWorksheet("FreezeRows"); + ws2.Cell(5, 5).SetActive(); + ws2.SheetView.FreezeRows(3); + var ws3 = wb.AddWorksheet("FreezeColumns"); + ws3.Cell(5, 5).SetActive(); + ws3.SheetView.FreezeColumns(3); - ////////////////////////////// - //var wsSplit = wb.Worksheets.Add("Split View"); - //wsSplit.SheetView.SplitRow = 3; - //wsSplit.SheetView.SplitColumn = 3; + var wsSplit = wb.AddWorksheet("Split View"); + wsSplit.Cell(2, 2).SetActive(); + wsSplit.SheetView.SplitRow = 3; + wsSplit.SheetView.SplitColumn = 3; - wb.SaveAs(filePath); + wb.SaveAs(filePath); + } } - - // Private - - // Override - - - #endregion } } diff --git a/ClosedXML_Tests/Resource/Examples/Misc/FreezePanes.xlsx b/ClosedXML_Tests/Resource/Examples/Misc/FreezePanes.xlsx index ac2714c..5110cc2 100644 --- a/ClosedXML_Tests/Resource/Examples/Misc/FreezePanes.xlsx +++ b/ClosedXML_Tests/Resource/Examples/Misc/FreezePanes.xlsx Binary files differ diff --git a/ClosedXML_Tests/Resource/Examples/Ranges/SelectingRanges.xlsx b/ClosedXML_Tests/Resource/Examples/Ranges/SelectingRanges.xlsx index b4e6aeb..26eeab7 100644 --- a/ClosedXML_Tests/Resource/Examples/Ranges/SelectingRanges.xlsx +++ b/ClosedXML_Tests/Resource/Examples/Ranges/SelectingRanges.xlsx Binary files differ