Тема: OpenXml. C# -> X++
Показать сообщение отдельно
Старый 23.10.2020, 11:03   #4  
Pandasama is offline
Pandasama
Участник
 
449 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Судя по ссылкам вроде https://stackoverflow.com/questions/...g-open-xml-sdk надо в коллекции типа doc.MainDocumentPart.RootElement.Descendants<BookmarkStart> найти элемент с нужным Name

Код:
Public static void ReplaceBookmarkParagraphs(WordprocessingDocument doc, string bookmark, string text)
    {
        //Find all Paragraph with 'BookmarkStart' 
        var t = (from el in doc.MainDocumentPart.RootElement.Descendants<BookmarkStart>()
                 where (el.Name == bookmark) &&
                 (el.NextSibling<Run>() != null)
                 select el).First();
        //Take ID value
        var val = t.Id.Value;
        //Find the next sibling 'text'
        OpenXmlElement next = t.NextSibling<Run>();
        //Set text value
        next.GetFirstChild<Text>().Text = text;

        //Delete all bookmarkEnd node, until the same ID
        deleteElement(next.GetFirstChild<Text>().Parent, next.GetFirstChild<Text>().NextSibling(), val, true);
    }
За это сообщение автора поблагодарили: decoder (1).