Программное заполнение элементов управления содержимым в документе Word (OpenXML) в .NET - PullRequest
4 голосов
/ 22 июля 2011

У меня действительно простой текстовый документ с Контент Контролем (весь текст).Я хочу перебрать элементы управления, заполняя их значениями из словаря.Должно быть очень просто, но что-то не так:

var myValues = new Dictionary<string, string>(); //And fill it

using (var wordDoc = WordprocessingDocument.Open(outputFile, true))
{
    MainDocumentPart mainPart = wordDoc.MainDocumentPart;

    foreach(SdtElement sdt in mainPart.Document.Descendants<SdtElement>())
    {
      SdtAlias alias = sdt.Descendants<SdtAlias>().FirstOrDefault();

      if (alias != null)
      {
          string sdtTitle = alias.Val.Value;
          sdt.??? = myValues[sdtTitle];
      }
    }
    mainPart.Document.Save();
 }

Как мне записать свою ценность в документ?Нужен ли CustomXmlPart?

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Если вы собираетесь сделать что-то подобное, вам нужно записать подходящий контент в SdtContent Sdt: абзац или прогон или tc и т. Д. В зависимости от родительского элемента sdt.

Альтернативасостоит в том, чтобы поместить содержимое вашего словаря в часть CustomXml и установить привязки данных для каждого элемента управления содержимым, которые ссылаются на соответствующий элемент словаря.Затем Word разрешит привязки при первом открытии docx (что не очень хорошо для вас, если вы ожидаете, что ваши пользователи откроют его чем-то другим).

0 голосов
/ 31 июля 2015

Вы можете использовать этот код.

foreach (SdtElement sdt in mainPart.Document.Descendants<SdtElement>())
{
SdtAlias alias = sdt.Descendants<SdtAlias>().FirstOrDefault();

if (alias != null)
 {
  string sdtTitle = alias.Val.Value;
  Text t = sdt.Descendants<Text>().First();
  t.Text = "test";
 }
}
...