我编写了以下代码,在文档页脚的contentcontrol中插入一些文本。
oItem.File.CheckOut();
byte[] byteArray = oItem.File.OpenBinary();
using (MemoryStream mem = new MemoryStream())
{
mem.Write(byteArray, 0, (int)byteArray.Length);
using (WordprocessingDocument wp = WordprocessingDocument.Open(mem, true))
{
Boolean foundInFooter = false;
MainDocumentPart mainPart = wp.MainDocumentPart;
foreach (FooterPart footerPart in mainPart.FooterParts)
{
Word.Footer footer = footerPart.Footer;
foreach (Word.SdtElement sdt in footer.Descendants<Word.SdtElement>().ToList())
{
Word.SdtAlias alias = sdt.Descendants<Word.SdtAlias>().FirstOrDefault();
if (alias.Val.Value == "Revisionsnummer")
{
foundInFooter = true;
if (sdt.Descendants<Word.Text>().FirstOrDefault() != null)
{
sdt.Descendants<Word.Text>().FirstOrDefault().Text = (string)oItem["Version"];
}
}
}
}
}
}
由于某种原因有时候sdt.Descendants<Word.Text>().FirstOrDefault()
会返回null,所以我无法插入文本。无论如何在theese案例中添加Word.Text?
答案 0 :(得分:0)
.First/Single/OrDefault
的前提是,您可以在使用之前检查表达式的结果。 e.g。
var obj = sdt.Descendants<Word.Text>().FirstOrDefault();
if(obj!=null)
{
obj.Text = (string)oItem["Version"];
}
else
{
...
}
如果您自动尝试为OrDefault
的结果集分配值,您将为自己设置空引用异常。