Как добавить ключевые слова в word, чтобы с помощью OpenXML заменить их?

Написал код, который заменяет ключевые слова в docx на данные, которые хранит объект. Как написать эти слова в word, чтобы он их правильно разделял? У меня получается, что я пишу, например, {Name}, а openXml считывает как Name}. Почему-то отбрасывает скобку или наоборот добавляет лишнее.

Пример:

model.Name = "Иван";

var body = doc.MainDocumentPart.Document.Body;
var replaceWord = "{Name}";

foreach (var text in body.Descendants<Text>())
{
        if (text.Text == replaceWord) // условие не выполняется из-за того, что text.Text = "Name", а не "{Name}"
        {
                text.Text =  model.Name;
        }
}



Ответы (1 шт):

Автор решения: VeekSY

Ещё давно писали, что при поиске слов в документе через OpenXML слово может быть разбито на части.

Все что я могу порекомендовать, то это либо использовать слова которые не разбиваются(такое тоже бывает), например abn целиком находит, либо заменять слова через закладки.

Здесь уже такой проблемы не будет, но у закладок есть другая проблема это размер шрифта. Он не всегда тот, который вы указали на её месте. Вот метод который находит закладку и вставляет текст

        public void InsertIntoBookmark(Dictionary<string, string> data)
        {
            foreach (var item in data)
            {
                BookmarkStart bookmarkStart = wd.MainDocumentPart.RootElement.Descendants<BookmarkStart>()
            .Where(x => x.Name == item.Key).FirstOrDefault();
                if (bookmarkStart is null)
                    continue;
                OpenXmlElement elem = bookmarkStart.NextSibling();

                var bookmarkEnd = wd.MainDocumentPart.RootElement.Descendants<BookmarkStart>()
                .Where(x => x.Id == bookmarkStart.Id).FirstOrDefault();

                while (elem != null && !(elem is BookmarkEnd))
                {
                    OpenXmlElement nextElem = elem.NextSibling();
                    elem.Remove();
                    elem = nextElem;
                }

                bookmarkStart.Parent.InsertAfter(new Run(new Text(item.Value)), bookmarkEnd);
            }
        }
→ Ссылка