Замените заполнители в документе Word на c#
-
05-07-2019 - |
Вопрос
У меня есть шаблон в формате word (.docx) и я хочу заменить некоторые заполнители в этом шаблоне моими собственными данными, вы знаете, где я могу найти подходящие классы для этого проекта?Мне было бы неплохо знать пространство имен.Существуют ли какие-либо более новые классы для обработки документов word в формате docx (xml), чем классы com?Спасибо вам за все ваши ответы, я надеюсь, что кто-нибудь сможет помочь мне с моей проблемой.
приветствует
Себастьян
Решение
Новые форматы office (docx, xlsx и т.д.) Представляют собой zip-файлы, содержащие коллекцию xml-файлов.Имея это в виду, у вас есть пара подходов.
Вы можете использовать Open XML SDK, расположенный по адресу http://www.microsoft.com/downloads/details.aspx ?Идентификатор семейства=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046 и displaylang=ru
Вы можете разархивировать файл docx, выполнить поиск и замену своих токенов и заархивировать его обратно.
Есть веб-сайт по адресу openxmldeveloper.org это как раз для такого рода вещей.Кроме того, имейте в виду, что они уже отправляют бета-версию 2 SDK.
Другие советы
Эрик Уайт затронул именно эту тему в статья в блоге с подробным описанием программы, предназначенной для проверки исходных фрагментов, встроенных в файлы DocX.Помимо этой статьи, я настоятельно рекомендую прочитать его серию статей о Office Open XML и C#.
Я использовал этот:
IEnumerable test2 = из элемента в теле.Элементы() где элемент.Внутренний текст.Содержит("sdt") выберите элемент;
Кстати, используя xml, я нашел это решение, которое находит ВСЕ sdt-узлы
NameTable nt = new NameTable();
XmlNamespaceManager nsManager = new XmlNamespaceManager(nt);
nsManager.AddNamespace("w", wordmlNamespace);
XmlDocument xDoc = new XmlDocument();
xDoc.Load(doc.MainDocumentPart.GetStream());
XmlNodeList nodeList = xDoc.SelectNodes(@"./w:document/w:body//w:sdt", nsManager);
Это работает, но разве SDK 2.0 в формате Open XML не дает мне никаких шансов на это?