Вопрос

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

Документ выглядит нормально внутри 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 есть ошибка?

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

Это было полезно?

Решение

Размер шрифта не является обязательным элементом, как и Свойства запуска.Для каждого запуска убедитесь, что 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, вы увидите, что для первых трех запусков указан размер шрифта, а для четвертого — нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top