public XMLStreamsheetModel(XMLWorkbookModel workbook, XMLWorksheetsModel sheets, PartManager manager, string name, ExcelGeneratorConstants.CreateTempStream createTempStream) { _workbookModel = workbook; _worksheetsModel = sheets; _manager = manager; _interface = new Streamsheet(this); Relationship relationship = _manager.AddStreamingPartToTree("application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet", "xl/worksheets/sheet{0}.xml", (XmlPart)_manager.GetPartByContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml")); List <CT_Sheet> sheet = ((CT_Workbook)_manager.Workbook.Root).Sheets.Sheet; _sheetentry = new CT_Sheet(); _sheetentry.Id_Attr = relationship.RelationshipId; _sheetentry.Name_Attr = name; _sheetentry.SheetId_Attr = sheets.NextId; sheet.Add(_sheetentry); _partName = relationship.RelatedPart; _headStream = createTempStream(string.Format(CultureInfo.InvariantCulture, "streamsheetHead{0}", _sheetentry.SheetId_Attr)); _tailStream = createTempStream(string.Format(CultureInfo.InvariantCulture, "streamsheetTail{0}", _sheetentry.SheetId_Attr)); _headWriter = new StreamsheetParser(new StreamWriter(_headStream), startAtPrelude: true); _tailWriter = new StreamsheetParser(new StreamWriter(_tailStream), startAtPrelude: false); _headWriter.WritePrelude(); }
private void AdvanceStreamsheetTo(StreamsheetParser.StreamSheetSection newSection, bool head) { StreamsheetParser streamsheetParser = head ? _headWriter : _tailWriter; IOoxmlCtWrapperModel ooxmlCtWrapperModel = head ? _stagedHeadTag : _stagedTailTag; CheckAdvancingStatus(newSection, streamsheetParser); if (ooxmlCtWrapperModel != null) { ooxmlCtWrapperModel.Cleanup(); streamsheetParser.WriteTag(ooxmlCtWrapperModel.OoxmlTag); if (head) { _stagedHeadTag = null; } else { _stagedTailTag = null; } } if (_stagedPageSetupModel != null && IsGoingPast(streamsheetParser.CurrentSection, newSection, StreamsheetParser.StreamSheetSection.SheetPr)) { _stagedPageSetupModel.Cleanup(); streamsheetParser.WriteSheetProperties(_stagedPageSetupModel.BackingSheet.SheetPr); } if (_stagedSheetView != null && IsGoingPast(streamsheetParser.CurrentSection, newSection, StreamsheetParser.StreamSheetSection.SheetViews)) { streamsheetParser.WriteSheetView(_stagedSheetView); _stagedSheetView = null; } if (_stagedPageSetupModel != null && IsGoingPast(streamsheetParser.CurrentSection, newSection, StreamsheetParser.StreamSheetSection.PageMargins)) { _stagedPageSetupModel.Cleanup(); streamsheetParser.WritePageMargins(_stagedPageSetupModel.BackingSheet.PageMargins); } if (_stagedPageSetupModel != null && IsGoingPast(streamsheetParser.CurrentSection, newSection, StreamsheetParser.StreamSheetSection.PageSetup)) { _stagedPageSetupModel.Cleanup(); streamsheetParser.WritePageSetup(_stagedPageSetupModel.BackingSheet.PageSetup); } if (_stagedPageSetupModel != null && IsGoingPast(streamsheetParser.CurrentSection, newSection, StreamsheetParser.StreamSheetSection.HeaderFooter)) { _stagedPageSetupModel.Cleanup(); if (_stagedPageSetupModel.BackingSheet.HeaderFooter == null) { _stagedPageSetupModel.BackingSheet.HeaderFooter = new CT_HeaderFooter(); } _stagedPageSetupModel.BackingSheet.HeaderFooter.AlignWithMargins_Attr = false; streamsheetParser.WriteHeaderFooter(_stagedPageSetupModel.BackingSheet.HeaderFooter); } if (_stagedDrawingTag != null && IsGoingPast(streamsheetParser.CurrentSection, newSection, StreamsheetParser.StreamSheetSection.Drawing)) { streamsheetParser.WriteTag(_stagedDrawingTag); _stagedDrawingTag = null; } if (_stagedSheetBackgroundTag != null && IsGoingPast(streamsheetParser.CurrentSection, newSection, StreamsheetParser.StreamSheetSection.Picture)) { streamsheetParser.WriteTag(_stagedSheetBackgroundTag); _stagedSheetBackgroundTag = null; } CheckAdvancingStatus(newSection, streamsheetParser); }
private void CheckAdvancingStatus(StreamsheetParser.StreamSheetSection newSection, StreamsheetParser writer) { if (_complete) { throw new FatalException(); } if (writer.CurrentSection > newSection) { throw new FatalException(); } }