2009-08-18 1 views
5

Ich möchte Word 2007 oder eine größere docx-Datei auf meinen Webserver hochladen und das Inhaltsverzeichnis in eine einfache XML-Struktur konvertieren. Dies auf dem Desktop mit traditionellem VBA zu tun, scheint als wäre es einfach gewesen. Ein Blick auf die WordprocessingML XML-Daten, die zum Erstellen der docx-Datei verwendet werden, sind verwirrend. Gibt es einen Weg (ohne COM), das Dokument eher objektorientiert zu navigieren?Wie kann ich ein Word-Dokument in einer ASP.NET-App abfragen?

Antwort

4

Ich empfehle dringend in die Open XML SDK 2.0 suchen. Es ist ein CTP, aber ich fand es extrem nützlich in der Manipulation von xmlx-Dateien, ohne mit COM überhaupt fertig zu werden. Die Dokumentation ist ein wenig skizzenhaft, aber die wichtigste Sache zu suchen ist die DocumentFormat.OpenXml.Packaging.WordprocessingDocument -Klasse. Sie können das DOCX-Dokument auseinander nehmen, wenn Sie die Erweiterung in ZIP umbenennen und dort in die XML-Dateien eingraben. Aus diesem Grund sieht es so aus, als wäre ein Inhaltsverzeichnis in einem "Strukturierten Dokument" -Tag enthalten und Dinge wie die Überschriften befinden sich in einem Hyperlink von dort. Ich habe ein bisschen damit herumgespielt und festgestellt, dass so etwas funktionieren sollte (oder zumindest einen Startpunkt 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); 
} 
0

Siehe XML Documents and Data als Ausgangspunkt. Insbesondere sollten Sie LINQ to XML verwenden.

Im Allgemeinen möchten Sie COM in einer .NET-Anwendung nicht verwenden.

3

Hier ist ein Blogbeitrag zum Abfragen von Open XML WordprocessingML-Dokumenten mit LINQ to XML. Mit Hilfe dieses Codes 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 Beitrag: Open XML SDK and LINQ to XML

-Eric

+1

Ich lese deine Beiträge zu Open XML - großartige Arbeit! –

Verwandte Themen