OpenXML插入到内容控件中缺少Word.Text

时间:2013-05-07 13:41:02

标签: c# openxml

我编写了以下代码,在文档页脚的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?

1 个答案:

答案 0 :(得分:0)

.First/Single/OrDefault的前提是,您可以在使用之前检查表达式的结果。 e.g。

var obj = sdt.Descendants<Word.Text>().FirstOrDefault();
if(obj!=null)
{
   obj.Text = (string)oItem["Version"];  
} 
else
{
   ...
}

如果您自动尝试为OrDefault的结果集分配值,您将为自己设置空引用异常。