以编程方式在.NET中的Word文档(OpenXML)中填充内容控件

时间:2011-07-22 12:44:06

标签: c# ms-word custom-controls openxml

我有一个非常简单的单词文档,内容控件(所有文本)。 我想遍历控件,用字典中的值填充它们。应该超级简单,但有些不对劲:

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 个答案:

答案 0 :(得分:1)

如果您要做类似的事情,您需要在Sdt的SdtContent中写入合适的内容:段落或者运行或者tc等,具体取决于sdt的父元素。

另一种方法是将字典的内容放入CustomXml部分,并在每个引用相关字典元素的内容控件上设置数据绑定。然后Word将在首次打开docx时解析绑定(如果您希望用户使用其他内容打开它,这对您来说不是很好)。

答案 1 :(得分:0)

您可以使用此代码。

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";
 }
}