2010-01-28 5 views
3

Я пытаюсь прочитать документ Word 2007 docx..NET OpenXML SDK 2 RunProperties - Null

Документ хорошо выглядит внутри Word, но когда я пытаюсь читать идентификатор, используя свой код, все объекты Run имеют RunProperites, которые устанавливают значение null.

Свойство, которое меня больше всего интересует, это RunProperies.FontSize, но, к сожалению, оно равно null, единственное свойство, к которому я могу получить доступ, - 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

FontSize не является обязательным элементом, и ни один не RunProperties. Для каждого прогона убедитесь, что r.RunProperties не является нулевым, а затем проверьте, что r.RunProperties.FontSize не имеет значения null перед попыткой прочитать значения. Что-то вдоль линий:

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

Если вы посмотрите на файл DOCX, которую вы предоставили, используя инструмент DocReflector, который поставляется с SDK, вы можете увидеть, что первые 3 пробеги определили размер шрифта, но четвёртая перспективе не.

+0

DocReflector отлично ... дал мне идеи, чтобы добраться до решения ... Большое спасибо! –

Смежные вопросы