Frage

Ich möchte ein Word 2007 oder mehr docx-Datei auf meiner Web-Server hochladen und das Inhaltsverzeichnis auf eine einfache XML-Struktur umwandeln. Tut dies auf dem Desktop mit traditionellen VBA scheint, wie es einfach gewesen wäre. Mit Blick auf den WordprocessingML XML-Daten verwendet, um die docx-Datei zu erstellen, ist verwirrend. Gibt es eine Möglichkeit (ohne COM) das Dokument in mehr eines objektorientiert?

zu navigieren
War es hilfreich?

Lösung

Ich empfehle Ihnen die Open XML SDK 2.0 . Es ist eine CTP, aber ich habe es sehr nützlich gefundene Dateien in der Manipulation xmlx ohne überhaupt mit COM zu beschäftigen. Die Dokumentation ist ein wenig lückenhaft, aber der Schlüssel, was zu suchen ist die DocumentFormat.OpenXml.Packaging.WordprocessingDocument Klasse. Sie können die .docx-Dokument auseinander nehmen, wenn Sie die Erweiterung umbenennen dort in die XML-Dateien in .zip und zu graben. Von dem zu tun, es sieht aus wie ein Inhaltsverzeichnis in einem „Structured Document“ Tag enthalten ist, und dass Dinge wie die Überschriften in einem Hyperlink sind von dort aus. Putzing mit ihm ein bisschen herum, fand ich, dass so etwas wie dies funktionieren sollte (oder Sie einen Ausgangspunkt zumindest geben).

WordprocessingDocument wordDoc = WordprocessingDocument.Open(Filename, false);
SdtBlock contents = wordDoc.MainDocumentPart.Document.Descendants<SdtBlock>().First();
List<string> contentList = new List<string>();
foreach (Hyperlink section in contents.Descendants<Hyperlink>())
{
    contentList.Add(section.Descendants<Text>().First().Text);
}

Andere Tipps

Hier ist ein Blog-Post auf Open XML WordprocessingML Dokumente Abfragen in XML mithilfe von LINQ. diesen Code verwenden, können Sie eine Abfrage schreiben, wie folgt:

using (WordprocessingDocument doc =
    WordprocessingDocument.Open(filename, false))
{
    foreach (var p in doc.MainDocumentPart.Paragraphs())
    {
        Console.WriteLine("Style: {0}   Text: >{1}<",
            p.StyleName.PadRight(16), p.Text);
        foreach (var c in p.Comments())
            Console.WriteLine(
              "  Comment Author:{0}  Text:>{1}<",
              c.Author, c.Text);
    }
}

Blog: Open XML SDK und LINQ to XML

-Eric

Siehe XML-Dokumente und Daten als Ausgangspunkt. Insbesondere sollten Sie LINQ to XML verwenden.

In der Regel wollen Sie nicht COM in einer .NET-Anwendung verwenden.

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