Frage

Ich versuche, Word 2007 docx-Dokument zu lesen.

Das Dokument sieht alles gut aus im Inneren Wort, aber wenn ich versuche, meinen Code zu lesen ID verwenden, werden alle Run-Objekte haben RunProperites gesetzt null.

Die Eigenschaft, die ich am meisten interessiert bin ist RunProperies.FontSize, aber leider ist es null als auch, die einzige Eigenschaft I Zugang kann Inner ist.

Ihr Code wie folgt aussieht:

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

Ich habe mein Dokument so einfach wie möglich minimiert, und es sieht aus wie dieser http://dl.dropbox.com/u/204110/test.docx

Ich habe ein ähnliches Dokument, das feine gelesen wird. Ist es möglich, dass es ein Fehler in OpenXML ist SDK 2?

Hat jemand ähnliche Probleme gehabt? Jede mögliche Hilfe würde geschätzt. Danke dir!

War es hilfreich?

Lösung

Schriftgrad ist kein erforderliches Element, und keiner ist RunProperties . Für jeden Lauf sicher, dass r.RunProperties ist nicht null, und dann sicher, dass r.RunProperties.FontSize ist nicht null, bevor Sie versuchen, die Werte zu lesen. Etwas entlang der Linien von:

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

Wenn Sie an der docx-Datei sehen Sie das DocReflector Tool geliefert, das mit dem SDK kommt, können Sie sehen, dass die ersten drei Läufe haben eine Schriftgröße angegeben, aber der vierte Lauf nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top