protected SdtElement CloneElementAndSetContentInPlaceholders(OpenXmlElementDataContext openXmlElementDataContext) { if (openXmlElementDataContext == null) { throw new ArgumentNullException("openXmlElementDataContext"); } if (openXmlElementDataContext.Element == null) { throw new ArgumentNullException("openXmlElementDataContext.element"); } SdtElement clonedSdtElement = null; if (openXmlElementDataContext.Element.Parent != null && openXmlElementDataContext.Element.Parent is Paragraph) { Paragraph clonedPara = openXmlElementDataContext.Element.Parent.InsertBeforeSelf(openXmlElementDataContext.Element.Parent.CloneNode(true) as Paragraph); clonedSdtElement = clonedPara.Descendants <SdtElement>().First(); } else { clonedSdtElement = openXmlElementDataContext.Element.InsertBeforeSelf(openXmlElementDataContext.Element.CloneNode(true) as SdtElement); } foreach (var v in clonedSdtElement.Elements()) { this.SetContentInPlaceholders(new OpenXmlElementDataContext() { Element = v, DataContext = openXmlElementDataContext.DataContext }); } return(clonedSdtElement); }
private void OnPlaceHolderFound(OpenXmlElementDataContext openXmlElementDataContext) { string templateTagPart = string.Empty; string tagGuidPart = string.Empty; SdtElement element = openXmlElementDataContext.Element as SdtElement; GetTagValue(element, out templateTagPart, out tagGuidPart); if (this.generationInfo.PlaceHolderTagToTypeCollection.ContainsKey(templateTagPart)) { switch (this.generationInfo.PlaceHolderTagToTypeCollection[templateTagPart]) { case PlaceHolderType.None: break; case PlaceHolderType.NonRecursive: this.NonRecursivePlaceholderFound(templateTagPart, openXmlElementDataContext); break; case PlaceHolderType.Recursive: this.RecursivePlaceholderFound(templateTagPart, openXmlElementDataContext); break; //case PlaceHolderType.Ignore: // this.IgnorePlaceholderFound(templateTagPart, openXmlElementDataContext); // break; case PlaceHolderType.Container: this.ContainerPlaceholderFound(templateTagPart, openXmlElementDataContext); break; } } }
private bool IsContentControl(OpenXmlElementDataContext openXmlElementDataContext) { if (openXmlElementDataContext == null || openXmlElementDataContext.Element == null) { return(false); } return(openXmlElementDataContext.Element is SdtBlock || openXmlElementDataContext.Element is SdtRun || openXmlElementDataContext.Element is SdtRow || openXmlElementDataContext.Element is SdtCell); }
private void PopulateOtherOpenXmlElements(OpenXmlElementDataContext openXmlElementDataContext) { if (openXmlElementDataContext.Element is OpenXmlCompositeElement && openXmlElementDataContext.Element.HasChildren) { List <OpenXmlElement> elements = openXmlElementDataContext.Element.Elements().ToList(); foreach (var element in elements) { //if (element.LocalName == "br") // //Console.WriteLine(" -------------= " + element.LocalName); if (element is OpenXmlCompositeElement) { this.SetContentInPlaceholders(new OpenXmlElementDataContext() { Element = element, DataContext = openXmlElementDataContext.DataContext }); } } } }
protected void SetContentInPlaceholders(OpenXmlElementDataContext openXmlElementDataContext) { if (IsContentControl(openXmlElementDataContext)) { string templateTagPart = string.Empty; string tagGuidPart = string.Empty; SdtElement element = openXmlElementDataContext.Element as SdtElement; GetTagValue(element, out templateTagPart, out tagGuidPart); if (this.generationInfo.PlaceHolderTagToTypeCollection.ContainsKey(templateTagPart)) { this.OnPlaceHolderFound(openXmlElementDataContext); } else { this.PopulateOtherOpenXmlElements(openXmlElementDataContext); } } else { //Console.WriteLine("Other " + openXmlElementDataContext.Element.LocalName); this.PopulateOtherOpenXmlElements(openXmlElementDataContext); } }
protected abstract void ContainerPlaceholderFound(string placeholderTag, OpenXmlElementDataContext openXmlElementDataContext);
protected abstract void RecursivePlaceholderFound(string placeholderTag, OpenXmlElementDataContext openXmlElementDataContext);