2013-05-07 35 views
0

我已經編寫了下面的代碼,在文檔的頁腳的contentcontrol中插入一些文本。OpenXML插入到內容控件中丟失Word.Text

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?

回答

0

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

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

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

+0

我的問題也許不清楚,但即時詢問是什麼,我應該把其他語句,如果obj == null插入文本內容控制? – 2013-05-07 13:46:32

+0

它應該可以做,因爲我張貼因爲我首先檢查空值,但什麼在別的聲明是我的問題希望你明白:) – 2013-05-07 13:49:19