diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs index 9379676..f038660 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs @@ -163,7 +163,7 @@ #endregion - private readonly Dictionary _unsupportedSheets = + internal readonly Dictionary UnsupportedSheets = new Dictionary(); private readonly Dictionary _stylesById = new Dictionary(); @@ -567,7 +567,7 @@ #region Nested type: UnsupportedSheet - private sealed class UnsupportedSheet + internal sealed class UnsupportedSheet { public Boolean IsActive; public UInt32 SheetId; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index 010deab..762189c 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -117,13 +117,13 @@ if (wsPart == null) { - _unsupportedSheets.Add(position, new UnsupportedSheet {SheetId = dSheet.SheetId.Value}); + UnsupportedSheets.Add(position, new UnsupportedSheet {SheetId = dSheet.SheetId.Value}); continue; } var sheetName = dSheet.Name; - var ws = (XLWorksheet) WorksheetsInternal.Add(sheetName); + var ws = (XLWorksheet) WorksheetsInternal.Add(sheetName, position); ws.RelId = dSheet.Id; ws.SheetId = (Int32) dSheet.SheetId.Value; @@ -318,10 +318,14 @@ if (workbookView != null && workbookView.ActiveTab != null) { UnsupportedSheet unsupportedSheet; - if (_unsupportedSheets.TryGetValue((Int32)(workbookView.ActiveTab.Value + 1), out unsupportedSheet)) + if (UnsupportedSheets.TryGetValue((Int32)(workbookView.ActiveTab.Value + 1), out unsupportedSheet)) unsupportedSheet.IsActive = true; else - Worksheet((Int32)(workbookView.ActiveTab.Value + 1)).SetTabActive(); + { + Int32 sId = (Int32)(workbookView.ActiveTab.Value + 1); + Worksheet(sId).SetTabActive(); + //- _unsupportedSheets.Keys.Where(n=>n <= sId ).Count() + } } LoadDefinedNames(workbook); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index 9cbe188..08d6f97 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -417,41 +417,26 @@ select sheet; UInt32 firstSheetVisible = 0; - UInt32 activeTab = (from us in _unsupportedSheets where us.Value.IsActive select (UInt32)us.Key - 1).FirstOrDefault(); + 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) + //Int32 position = 0; + Int32 totalSheets = sheetElements.Count() + UnsupportedSheets.Count; + for (Int32 p = 1; p <= totalSheets; p++) { - position++; - if (_unsupportedSheets.ContainsKey(position)) + if (!UnsupportedSheets.ContainsKey(p)) { - Sheet unsupportedSheet = - workbook.Sheets.Elements().Where(s => s.SheetId == _unsupportedSheets[position].SheetId).First(); - workbook.Sheets.RemoveChild(unsupportedSheet); - workbook.Sheets.AppendChild(unsupportedSheet); - _unsupportedSheets.Remove(position); - } - - workbook.Sheets.RemoveChild(sheet); - + var sheet = sheetElements.ElementAt(p - UnsupportedSheets.Keys.Count(n => n <= p) - 1); var xlSheet = Worksheet(sheet.Name); if (xlSheet.Visibility != XLWorksheetVisibility.Visible) sheet.State = xlSheet.Visibility.ToOpenXml(); - workbook.Sheets.AppendChild(sheet); - if (foundVisible) continue; if (sheet.State == null || sheet.State == SheetStateValues.Visible) foundVisible = true; else firstSheetVisible++; - - } - 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); + } } var workbookView = workbook.BookViews.Elements().FirstOrDefault(); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index 0a6017d..7dd52ed 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -207,7 +207,7 @@ get { return _position; } set { - if (value > Workbook.WorksheetsInternal.Count + 1) + if (value > Workbook.WorksheetsInternal.Count + Workbook.UnsupportedSheets.Count + 1) throw new IndexOutOfRangeException("Index must be equal or less than the number of worksheets + 1."); if (value < _position)