diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs index 41c21c9..a9af618 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs @@ -509,7 +509,12 @@ get { return true; } } - private Dictionary _unsupportedSheets = new Dictionary(); + private class UnsupportedSheet + { + public UInt32 SheetId; + public Boolean IsActive; + } + private Dictionary _unsupportedSheets = new Dictionary(); //-- #region Nested Type: XLLoadSource private enum XLLoadSource diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index 6ff094e..b7df233 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -118,7 +118,7 @@ if (wsPart == null) { - _unsupportedSheets.Add(position, dSheet.SheetId.Value); + _unsupportedSheets.Add(position, new UnsupportedSheet {SheetId = dSheet.SheetId.Value}); continue; } @@ -246,8 +246,14 @@ var workbook = dSpreadsheet.WorkbookPart.Workbook; var workbookView = (WorkbookView) workbook.BookViews.FirstOrDefault(); - if (workbookView != null && workbookView.ActiveTab != null && !_unsupportedSheets.ContainsKey((Int32)(workbookView.ActiveTab.Value + 1))) - Worksheet((Int32) (workbookView.ActiveTab.Value + 1)).SetTabActive(); + if (workbookView != null && workbookView.ActiveTab != null) + { + UnsupportedSheet unsupportedSheet; + if (_unsupportedSheets.TryGetValue((Int32)(workbookView.ActiveTab.Value + 1), out unsupportedSheet)) + unsupportedSheet.IsActive = true; + else + Worksheet((Int32)(workbookView.ActiveTab.Value + 1)).SetTabActive(); + } if (workbook.DefinedNames == null) return; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index e86c3c2..af5bb7e 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -395,6 +395,7 @@ select sheet; UInt32 firstSheetVisible = 0; + UInt32 activeTab = (from us in _unsupportedSheets where us.Value.IsActive select (UInt32)us.Key - 1).FirstOrDefault(); Boolean foundVisible = false; Int32 position = 0; foreach (Sheet sheet in sheetElements) @@ -403,7 +404,7 @@ if (_unsupportedSheets.ContainsKey(position)) { Sheet unsupportedSheet = - workbook.Sheets.Elements().Where(s => s.SheetId == _unsupportedSheets[position]).First(); + workbook.Sheets.Elements().Where(s => s.SheetId == _unsupportedSheets[position].SheetId).First(); workbook.Sheets.RemoveChild(unsupportedSheet); workbook.Sheets.AppendChild(unsupportedSheet); _unsupportedSheets.Remove(position); @@ -420,7 +421,7 @@ firstSheetVisible++; } - foreach (Sheet unsupportedSheet in _unsupportedSheets.Values.Select(sheetId => workbook.Sheets.Elements().Where(s => s.SheetId == sheetId).First())) + foreach (Sheet unsupportedSheet in _unsupportedSheets.Values.Select(us => workbook.Sheets.Elements().Where(s => s.SheetId == us.SheetId).First())) { workbook.Sheets.RemoveChild(unsupportedSheet); workbook.Sheets.AppendChild(unsupportedSheet); @@ -428,13 +429,16 @@ var workbookView = workbook.BookViews.Elements().FirstOrDefault(); - UInt32 activeTab = firstSheetVisible; - foreach (XLWorksheet ws in worksheets) + if (activeTab == 0) { - if (!ws.TabActive) continue; + activeTab = firstSheetVisible; + foreach (XLWorksheet ws in worksheets) + { + if (!ws.TabActive) continue; - activeTab = (UInt32)(ws.Position - 1); - break; + activeTab = (UInt32)(ws.Position - 1); + break; + } } if (workbookView == null)