Замените заполнители в документе Word на С#

У меня есть шаблон в формате Word (.docx), и я хочу заменить некоторые заполнители в этом шаблоне своими данными. Вы знаете, где я могу найти подходящие классы для этого проекта? Было бы неплохо, если бы я знал пространство имен. Существуют ли более новые классы для обработки текстовых документов в формате docx (xml), чем классы com? Спасибо за все ваши ответы, я надеюсь, что кто-то может помочь мне с моей проблемой.

приветствует

Себастьян


person Sebastian Müller    schedule 08.10.2008    source источник


Ответы (4)


Новые офисные форматы (docx, xlsx и т. д.) представляют собой zip-файлы, содержащие набор файлов xml. Имея это в виду, у вас есть несколько подходов.

  1. Вы можете использовать Open XML SDK, расположенный по адресу http://www.microsoft.com/downloads/details.aspx?FamilyId=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&displaylang=en

  2. Вы можете разархивировать файл docx, выполнить поиск и замену своих токенов, а затем снова заархивировать его.

Существует веб-сайт openxmldeveloper.org, предназначенный именно для таких вещей. Кроме того, имейте в виду, что они уже выпускают бета-версию 2 SDK.

person NotMe    schedule 08.10.2008
comment
К сведению, версия 2.0 Open XML SDK теперь доступна здесь: microsoft.com/downloads/ - person John B; 20.04.2010

Эрик Уайт затронул именно эту тему в статья в блоге, в которой подробно описывается программа, предназначенная для проверки исходных фрагментов, встроенных в файлы DocX. Помимо этой статьи, я настоятельно рекомендую прочитать его серию на Office Open XML и C#.

person user7116    schedule 08.10.2008

Я использовал этот:

IEnumerable test2 = из элемента в body.Elements(), где element.InnerText.Contains("sdt") выбирает элемент;

person Freek Bos    schedule 09.04.2010

Кстати, используя 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);

Это работает, но разве Open XML Format SDK 2.0 не дает мне для этого шанса?

person Sebastian Müller    schedule 10.10.2008