/*********************************** * DAL METHODS ************************************/ // Read internal static SheetViews ReadSheetViewsFromReader(CustomOpenXmlReader reader, Worksheet worksheet) { SheetViews sheetViews = new SheetViews(worksheet); while (reader.ReadToEndElement<OpenXmlSpreadsheet.SheetViews>()) { // only read the first sheetView element. if (reader.IsEndElementOfType<OpenXmlSpreadsheet.SheetView>()) break; if (reader.IsStartElementOfType<OpenXmlSpreadsheet.SheetView>()) { foreach (CustomOpenXmlAttribute attribute in reader.Attributes) { switch (attribute.LocalName) { case "tabSelected": sheetViews.Selected = attribute.GetBoolValue(); break; } } } else if (reader.IsStartElementOfType<OpenXmlSpreadsheet.Pane>()) { int ySplit = 0; int xSplit = 0; bool isFrozen = false; foreach (CustomOpenXmlAttribute attribute in reader.Attributes) { switch (attribute.LocalName) { case "ySplit": ySplit = attribute.GetIntValue(); break; case "xSplit": xSplit = attribute.GetIntValue(); break; case "state": isFrozen = (attribute.Value == "frozen"); break; } } if (isFrozen) { if (ySplit > 0) sheetViews.FrozenRow = ySplit; if (xSplit > 0) sheetViews.FrozenRow = xSplit; } } } return sheetViews; }
/*********************************** * INTERNAL METHODS ************************************/ internal SheetViews Clone(Worksheet worksheet) { SheetViews newSheetViews = new SheetViews(worksheet, false, FrozenRow, FrozenColumn); return newSheetViews; }
// Write internal static void WriteSheetViewsToWriter(CustomOpenXmlWriter<OpenXmlPackaging.WorksheetPart> writer, SheetViews sheetViews) { if (sheetViews.HasValue()) { writer.WriteOpenXmlElement(new OpenXmlSpreadsheet.SheetViews()); writer.WriteOpenXmlElement(new OpenXmlSpreadsheet.SheetView()); if (sheetViews.Selected) writer.WriteAttribute("tabSelected", sheetViews.Selected); // the implementation of worksheetViewId gets quite complicated. The use isn't supported here, but the attribute is necessary to compile. writer.WriteAttribute("workbookViewId", 0); if (sheetViews.FrozenRow > 0 || sheetViews.FrozenColumn > 0) { writer.WriteOpenXmlElement(new OpenXmlSpreadsheet.Pane()); writer.WriteAttribute("state", "frozen"); if (sheetViews.FrozenRow > 0) writer.WriteAttribute("ySplit", sheetViews.FrozenRow); if (sheetViews.FrozenColumn > 0) writer.WriteAttribute("xSplit", sheetViews.FrozenColumn); writer.WriteAttribute("topLeftCell", sheetViews.Worksheet.Cells[sheetViews.FrozenRow + 1, sheetViews.FrozenColumn + 1].Address); writer.WriteEndElement(); // Pane } writer.WriteEndElement(); // SheetView writer.WriteEndElement(); // SheetViews } }