Exemple #1
0
    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();
    }
Exemple #2
0
 private static void KeepContentAndDeleteSdt(SdtElement sdt, OpenXmlCompositeElement sdtContent)
 {
     foreach (var elem in sdtContent.ChildElements.ToArray())
     {
         elem.Remove();
         sdt.Parent.InsertBefore(elem, sdt);
     }
     sdt.Remove();
 }
Exemple #3
0
    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);
    }
Exemple #4
0
        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();
                }
            }
        }
Exemple #5
0
        /// <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();
 }