public DrawingsGroup(IStreamReader reader) { // MsoDrawing *Continue *(TEXTOBJECT / OBJ / CHART) // MsoDrawing this.MsoDrawing = (MsoDrawing)BiffRecord.ReadRecord(reader); // *Continue this.Continues = new List <Continue>(); while (BiffRecord.GetNextRecordType(reader) == RecordType.Continue) { this.Continues.Add((Continue)BiffRecord.ReadRecord(reader)); } // *(TEXTOBJECT / OBJ / CHART) this.Objects = new List <ObjectGroup>(); while (BiffRecord.GetNextRecordType(reader) == RecordType.Obj || BiffRecord.GetNextRecordType(reader) == RecordType.TxO || BiffRecord.GetNextRecordType(reader) == RecordType.BOF) { this.Objects.Add(new ObjectGroup(reader)); } }
/// <summary> /// Mapping definition for embedded objects /// </summary> /// <param name="objectsSequence"></param> public void Apply(ObjectsSequence objectsSequence) { _writer.WriteStartElement(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElWsDr, Dml.SpreadsheetDrawing.Ns); _writer.WriteAttributeString("xmlns", Dml.SpreadsheetDrawing.Prefix, "", Dml.SpreadsheetDrawing.Ns); _writer.WriteAttributeString("xmlns", Dml.Prefix, "", Dml.Ns); foreach (DrawingsGroup drawingsGroup in objectsSequence.DrawingsGroup) { // TODO: currently only embedded charts are mapped. Shapes and images are not yet implemented. // The check on the type of object would have to be removed here once shapes and images are supported. // ObjectGroup objGroup = drawingsGroup.Objects.Find(p => p.ChartSheetSequence != null); if (objGroup != null) { MsoDrawing msoDrawing = drawingsGroup.MsoDrawing; // find OfficeArtClientAnchorSheet with drawing RegularContainer container = msoDrawing.rgChildRec as RegularContainer; if (container != null) { ClientAnchor clientAnchor = container.FirstDescendantWithType <ClientAnchor>(); if (clientAnchor != null) { OfficeArtClientAnchorSheet oartClientAnchor = new OfficeArtClientAnchorSheet(clientAnchor.RawData); // xdr:twoCellAnchor _writer.WriteStartElement(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElTwoCellAnchor, Dml.SpreadsheetDrawing.Ns); string editAs = "absolute"; if (oartClientAnchor.fSize && oartClientAnchor.fMove) { // Move and resize with anchor cells editAs = "twoCell"; } else if (!oartClientAnchor.fSize && oartClientAnchor.fMove) { // Move with cells but do not resize editAs = "oneCell"; } _writer.WriteAttributeString(Dml.SpreadsheetDrawing.AttrEditAs, editAs); { // xdr:from _writer.WriteStartElement(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElFrom, Dml.SpreadsheetDrawing.Ns); _writer.WriteElementString(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElCol, Dml.SpreadsheetDrawing.Ns, oartClientAnchor.colL.ToString()); _writer.WriteElementString(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElColOff, Dml.SpreadsheetDrawing.Ns, oartClientAnchor.dxL.ToString()); _writer.WriteElementString(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElRow, Dml.SpreadsheetDrawing.Ns, oartClientAnchor.rwT.ToString()); _writer.WriteElementString(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElRowOff, Dml.SpreadsheetDrawing.Ns, oartClientAnchor.dyT.ToString()); _writer.WriteEndElement(); // xdr:from // xdr:to _writer.WriteStartElement(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElTo, Dml.SpreadsheetDrawing.Ns); _writer.WriteElementString(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElCol, Dml.SpreadsheetDrawing.Ns, oartClientAnchor.colR.ToString()); _writer.WriteElementString(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElColOff, Dml.SpreadsheetDrawing.Ns, oartClientAnchor.dxR.ToString()); _writer.WriteElementString(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElRow, Dml.SpreadsheetDrawing.Ns, oartClientAnchor.rwB.ToString()); _writer.WriteElementString(Dml.SpreadsheetDrawing.Prefix, Dml.SpreadsheetDrawing.ElRowOff, Dml.SpreadsheetDrawing.Ns, oartClientAnchor.dyB.ToString()); _writer.WriteEndElement(); // xdr:to ObjectGroup objectGroup = drawingsGroup.Objects.Find(p => p.ChartSheetSequence != null); if (objectGroup != null) { ChartSheetContentSequence chartSheetContentSequence = objectGroup.ChartSheetSequence.ChartSheetContentSequence; insertObjectChoices(chartSheetContentSequence); } } _writer.WriteEndElement(); // xdr:twoCellAnchor } } } } _writer.WriteEndElement(); _writer.WriteEndDocument(); _writer.Flush(); }