2010-01-28 27 views
3

J'essaie de lire le document docx Word 2007..NET OpenXML SDK 2 RunProperties sont Null

Le document semble bien dans Word, mais lorsque j'essaie de lire l'ID à l'aide de mon code, tous les objets Run ont RunProperites défini null.

La propriété qui m'intéresse le plus est RunProperies.FontSize, mais malheureusement elle est également nulle, la seule propriété à laquelle je peux accéder est InnerText.

Mon code ressemble à ceci:

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 
     } 
    } 
} 

J'ai minimisais mon document aussi simple que possible, et il semble que ce http://dl.dropbox.com/u/204110/test.docx

J'ai un document similaire qui est lu bien. Est-il possible qu'il existe un bogue dans OpenXML SDK 2?

Est-ce que quelqu'un a eu des problèmes similaires? Toute aide serait appréciée. Merci!

Répondre

2

FontSize est pas un élément requis, ni est RunProperties. Pour chaque exécution, vérifiez que r.RunProperties n'est pas vide, puis vérifiez que r.RunProperties.FontSize n'est pas NULL avant d'essayer de lire les valeurs. Quelque chose le long des lignes de:

uint fontSize = SOME_DEFAULT_FONT_SIZE; 
RunProperties propertiesElement = r.RunProperties; 
if (propertiesElement != null) { 
    FontSize sizeElement = propertiesElement.FontSize; 
    if (sizeElement != null) { 
     fontSize = sizeElement.Val.Value; 
    } 
    } 
} 

Si vous regardez le fichier docx que vous avez fourni à l'aide de l'outil DocReflector qui vient avec le SDK, vous pouvez voir que les 3 premières courses ont une taille de police spécifiée, mais la 4ème course ne fait pas.

+0

DocReflector est génial .... m'a donné des idées, pour arriver à la solution ... Merci beaucoup! –