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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top