.NET OpenXML SDK 2 RunProperties имеют значение NULL
-
23-09-2019 - |
Вопрос
Я пытаюсь прочитать документ 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, вы увидите, что для первых трех запусков указан размер шрифта, а для четвертого — нет.