2010-01-28 69 views
3

我正嘗試讀取Word 2007 docx文檔。.NET OpenXML SDK 2 RunProperties爲空

Word中的文檔看起來很好,但是當我嘗試使用我的代碼讀取id時,所有Run對象都將RunProperites設置爲null。

我最感興趣的屬性是RunProperies.FontSize,但不幸的是它也是空的,我可以訪問的唯一屬性是InnerText。

我的代碼看起來是這樣的:

using (WordprocessingDocument doc = WordprocessingDocument.Open(filename, true)) 
{ 
    MainDocumentPart mainPart = doc.MainDocumentPart; 
    IList<Paragraph> paragraphList = doc.MainDocumentPart.Document.Body.Elements<Paragraph>().ToList<Paragraph>(); 

    foreach (Paragraph pr in paragraphList) 
    { 
     IList<Run> runList = pr.Elements<Run>().ToList<Run>(); 
     foreach (Run r in runList) 
     { 
      // Some logic 
     } 
    } 
} 

我已經儘量減少我的文檔,以儘可能簡單,它看起來像這樣http://dl.dropbox.com/u/204110/test.docx

我有讀細類似的文件。 OpenXML SDK 2中可能存在錯誤嗎?

有沒有人有類似的問題?任何幫助將不勝感激。 謝謝!

回答

2

字體大小不是必填元素,也不是RunProperties。對於每次運行,請確認r.RunProperties不爲空,然後在嘗試讀取值之前驗證r.RunProperties.FontSize不爲空。沿着線的東西:

uint fontSize = SOME_DEFAULT_FONT_SIZE; 
RunProperties propertiesElement = r.RunProperties; 
if (propertiesElement != null) { 
    FontSize sizeElement = propertiesElement.FontSize; 
    if (sizeElement != null) { 
     fontSize = sizeElement.Val.Value; 
    } 
    } 
} 

如果你看一下你提供使用SDK附帶的DocReflector工具的docx文件,你可以看到,第3個運行指定的字體大小,但是第四運行纔不是。

+0

DocReflector是偉大的....給了我想法,得到解決方案...非常感謝你! – 2010-01-29 08:43:07