Замените заполнители в текстовом документе на c # - PullRequest
6 голосов
/ 08 октября 2008

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

привет

Себастьян

Ответы [ 4 ]

5 голосов
/ 08 октября 2008

Новые офисные форматы (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.

1 голос
/ 09 апреля 2010

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

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

1 голос
/ 08 октября 2008

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

0 голосов
/ 10 октября 2008

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

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

...