簡體   English   中英

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

[英]OpenXML insert into content control Missing Word.Text

我編寫了以下代碼,以在文檔的頁腳中的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,因此我無法插入文本。 無論如何,在這些情況下是否要添加Word.Text?

.First/Single/OrDefault的前提是,您可以在使用表達式之前檢查表達式的結果。 例如

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

如果您automically嘗試將值分配給結果集的OrDefault你將自己設置為空引用例外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM