簡體   English   中英

以編程方式在 .NET 中的 Word 文檔 (OpenXML) 中填充內容控件

[英]Programatically filling content controls in Word document (OpenXML) in .NET

我有一個非常簡單的帶有內容控件(所有文本)的 word 文檔。 我想遍歷控件,用字典中的值填充它們。 應該超級簡單,但是出了點問題:

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 嗎?

如果你要做這樣的事情,你需要在 Sdt 的 SdtContent 中寫入合適的內容:段落或運行或 tc 等,具體取決於 sdt 的父元素。

另一種方法是將字典的內容放入 CustomXml 部分,並在每個引用相關字典元素的內容控件上設置數據綁定。 然后,Word 將在第一次打開 docx 時解析綁定(如果您希望您的用戶用其他東西打開它,這對您來說並不是什么好事)。

您可以使用此代碼。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM