[英]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.