我正在學習OpenXML。我一直在尋找幾個小時試圖找到如何做一個簡單的任務:插入文本到c#中的內容控件。OpenXML將文本插入內容控件Word 2007
我有兩個控件「名稱」和「年齡」的模板文檔。我可以很好地找到它們,但我不能在其中添加文本。我嘗試了很多東西,都無濟於事。
byte[] templateBytes = System.IO.File.ReadAllBytes(fileName);
using (MemoryStream templateStream = new MemoryStream())
{
templateStream.Write(templateBytes, 0, (int)templateBytes.Length);
using (WordprocessingDocument outDoc = WordprocessingDocument.Open(templateStream, true))
{
MainDocumentPart mainPart = outDoc.MainDocumentPart;
foreach (SdtElement sdt in mainPart.Document.Descendants<SdtElement>().ToList())
{
SdtAlias alias = sdt.Descendants<SdtAlias>().FirstOrDefault();
if (alias != null)
{
string sdtTitle = alias.Val.Value;
switch (sdtTitle)
{
case "Name":
// ¿Qué?
break;
case "Age":
// ¿Qué?
break;
}
}
}
outDoc.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
}
using (FileStream fileStream = new FileStream(savePath, System.IO.FileMode.CreateNew))
{
templateStream.WriteTo(fileStream);
}
}
所有幫助非常感謝。
乾杯,
Tim。
編輯 -
感謝您的答覆。接受你的建議,我已經嘗試使用生產力工具進行施工和鑽取,以找到要更新的子元素。你能告訴我,如果你能看到爲什麼這個代碼根本就不寫任何文件?
foreach (SdtElement sdt in mainPart.Document.Descendants<SdtElement>().ToList())
{
SdtAlias alias = sdt.Descendants<SdtAlias>().FirstOrDefault();
if (alias != null)
{
SdtRun xRun = (SdtRun)sdt;
SdtContentRun xContentRun = xRun.Descendants<SdtContentRun>().FirstOrDefault();
Run xRun = xContentRun.Descendants<Run>().FirstOrDefault();
Text xText = xRun.Descendants<Text>().FirstOrDefault();
string sdtTitle = alias.Val.Value;
switch (sdtTitle)
{
case "Name":
xText.Text = "Whatever";
break;
case "Age":
xText.Text = "69";
break;
}
}
}
嗨,你有xRun聲明兩次,所以Visual Studio不編譯。這裏的變化: [code]運行xRun2 = xContentRun.Descendants().FirstOrDefault(); [/ code] –
2015-03-28 23:34:02