.NET OpenXML SDK 2 RunProperties são nulos
-
23-09-2019 - |
Pergunta
Estou tentando ler o documento DOCX Word 2007.
O documento parece bom dentro da palavra, mas quando tento ler ID usando meu código, todos os objetos executados têm o RunProperites definidos.
A propriedade em que estou mais interessada é o RunProperies.FontSize, mas, infelizmente, também é nulo, a única propriedade que posso acessar é o InnerText.
Meu código se parece com o seguinte:
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
}
}
}
Eu minimizei meu documento o mais simples possível, e parece isso http://dl.dropbox.com/u/204110/test.docx
Eu tenho um documento semelhante que é lido bem. É possível que haja um bug no OpenXML SDK 2?
Alguém teve problemas semelhantes? Qualquer ajuda apreciada. Obrigada!
Solução
Tamanho da fonte não é um elemento necessário, e nem é RunProperties. Para cada corrida, verifique se R.RunProperties não é nulo e depois verifique se R.RunProperties.FontSize não é nulo antes de tentar ler os valores. Algo parecido com:
uint fontSize = SOME_DEFAULT_FONT_SIZE;
RunProperties propertiesElement = r.RunProperties;
if (propertiesElement != null) {
FontSize sizeElement = propertiesElement.FontSize;
if (sizeElement != null) {
fontSize = sizeElement.Val.Value;
}
}
}
Se você observar o arquivo DOCX que você forneceu usando a ferramenta Docrefletor que vem com o SDK, poderá ver que as três primeiras execuções têm um tamanho de fonte especificado, mas a 4ª execução não.