public static void ReplaceWithContentValue(this SdtElement Element, string?Content = null) { var content = Element.GetContent().ToArray(); var first = true; foreach (var content_element in content) { content_element.Remove(); if (Content == null || !first) { continue; } var run = content_element as Run ?? content_element.DescendantChilds <Run>().FirstOrDefault(); if (run is null) { continue; } first = false; run.Text(Content); Element.InsertAfterSelf(content_element); } Element.Remove(); }
private static void KeepContentAndDeleteSdt(SdtElement sdt, OpenXmlCompositeElement sdtContent) { foreach (var elem in sdtContent.ChildElements.ToArray()) { elem.Remove(); sdt.Parent.InsertBefore(elem, sdt); } sdt.Remove(); }
public static OpenXmlElement ReplaceWithContent(this SdtElement element) { var sdt_content = element.ChildElements.First(e => e.LocalName.StartsWith("sdt") && !e.LocalName.EndsWith("Pr")); var content = sdt_content.FirstChild ?? throw new InvalidOperationException("Не найдено содержимое шаблонного элемента"); content.Remove(); element.InsertAfterSelf(content); element.Remove(); return(content); }
internal static void DeleteAllSQLQueryInWord(WordprocessingDocument document) { List <SdtElement> sql_content_control_list = document.MainDocumentPart.Document.Body.Descendants <SdtElement>().Where(s => s.Descendants <SdtAlias>().FirstOrDefault().Val.ToString().ToLower() == StaticValues.sql_cc_name || s.Descendants <SdtAlias>().FirstOrDefault().Val.ToString().ToLower() == StaticValues.repeatsql_cc_name).ToList(); foreach (SdtElement content_control in sql_content_control_list) { // Recheck to make sure if (content_control.InnerText.ToLower().Contains("select")) { content_control.Remove(); } } }
/// <summary> /// Removes the content control and keep contents. /// </summary> /// <param name="contentControl">The content control.</param> /// <param name="customXmlPartDocElement">The custom XML part doc element.</param> /// <returns>Returns the custom xml part document element list</returns> private IEnumerable <OpenXmlCompositeElement> RemoveContentControlAndKeepContents(SdtElement contentControl, XmlElement customXmlPartDocElement) { IList <OpenXmlCompositeElement> elementsList = new List <OpenXmlCompositeElement>(); this.AssignContentFromCustomXmlPartForDataboundControl(contentControl, customXmlPartDocElement); foreach (var elem in GetSdtContentOfContentControl(contentControl).Elements()) { var newElement = contentControl.Parent.InsertBefore(elem.CloneNode(true), contentControl); AddToListIfCompositeElement(elementsList, newElement); } contentControl.Remove(); return(elementsList); }
internal static WordprocessingDocument RemoveSdtBlocks(this WordprocessingDocument doc, IEnumerable <string> contentBlocks) { List <SdtElement> SdtBlocks = doc.MainDocumentPart.Document.Descendants <SdtElement>().ToList(); if (contentBlocks == null) { return(doc); } foreach (var s in contentBlocks) { SdtElement currentElement = SdtBlocks.FirstOrDefault(sdt => sdt.SdtProperties.GetFirstChild <Tag>()?.Val == s); if (currentElement == null) { continue; } IEnumerable <OpenXmlElement> elements = null; if (currentElement is SdtBlock) { elements = (currentElement as SdtBlock).SdtContentBlock.Elements(); } else if (currentElement is SdtCell) { elements = (currentElement as SdtCell).SdtContentCell.Elements(); } else if (currentElement is SdtRun) { elements = (currentElement as SdtRun).SdtContentRun.Elements(); } foreach (var el in elements) { currentElement.InsertBeforeSelf(el.CloneNode(true)); } currentElement.Remove(); } return(doc); }
public void Remove() { TemplateDocument?.RemoveControl(this); SdtElement.Remove(); }