.NET OpenXML SDK 2 RunProperties являются нулевыми - PullRequest
3 голосов
/ 28 января 2010

Я пытаюсь прочитать документ Word 2007 docx.

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

Свойство, которое меня больше всего интересует, - это 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 есть ошибка?

У кого-нибудь были подобные проблемы? Любая помощь будет оценена. Благодарю вас!

1 Ответ

2 голосов
/ 28 января 2010

FontSize не является обязательным элементом и не является 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;
    }
  }
}

Если вы посмотрите на файл docx, который вы предоставили с помощью инструмента DocReflector, который поставляется в комплекте с SDK, вы увидите, что для первых 3 прогонов указан размер шрифта, а для четвертого прогона - нет.

...