Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OpenXML插入内容控件缺少Word.Text_C#_Openxml - Fatal编程技术网

C# OpenXML插入内容控件缺少Word.Text

C# OpenXML插入内容控件缺少Word.Text,c#,openxml,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 = Wordp

我编写了以下代码,以便在文档页脚的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"];
                    }
                }
            }
        }
    }
}   
oItem.File.CheckOut();
byte[]byteArray=oItem.File.OpenBinary();
使用(MemoryStream mem=new MemoryStream())
{
mem.Write(byteArray,0,(int)byteArray.Length);
使用(WordprocessingDocument wp=WordprocessingDocument.Open(mem,true))
{
布尔foundInFooter=false;
MainDocumentPart mainPart=wp.MainDocumentPart;
foreach(mainPart.FooterPart中的FooterPart FooterPart)
{
Word.Footer Footer=footerPart.Footer;
foreach(footer.substands().ToList()中的Word.SdtElement sdt)
{
Word.SdtAlias别名=sdt.subjects().FirstOrDefault();
如果(别名.Val.Value==“修订人”)
{
foundInFooter=true;
if(sdt.subjects().FirstOrDefault()!=null)
{
sdt.subjects().FirstOrDefault().Text=(字符串)oItem[“Version”];
}
}
}
}
}
}   

由于某些原因,
sdt.subjections().FirstOrDefault()
有时返回null,因此无法插入文本。在这些情况下是否需要添加单词.Text?

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

var obj = sdt.Descendants<Word.Text>().FirstOrDefault();
if(obj!=null)
{
   obj.Text = (string)oItem["Version"];  
} 
else
{
   ...
}
var obj=sdt.subjects().FirstOrDefault();
如果(obj!=null)
{
objectj.Text=(字符串)oItem[“版本”];
} 
其他的
{
...
}

如果您自动尝试为
或默认值的结果集赋值,您将为自己设置空引用异常。

我的问题可能不清楚,但我要问的是,如果obj==null要向内容控件插入文本,我应该在else语句中添加什么?按照我发布的操作应该可以,因为我首先检查null值,但在else语句中应该做什么是我的问题希望您理解:)