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
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);
}
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.
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. Wie kann ich BigQuery abfragen?
- 2. Wie kann ich den Wert einer Serveroption in Sybase abfragen?
- 3. Wie kann ich Abfragen in Slick aggregieren?
- 4. Kann ich den RequestText einer Prozedur in Teradata abfragen?
- 5. Wie kann ich ein XDocument mit einem 'Pfad' abfragen?
- 6. Kann ich Win32 COM verwenden, um Text in einem Worddokument zu ersetzen?
- 7. Wie kann ich ein anderes Dokument in einer anderen Sammlung nach dem Rückruf mit MongoDB abfragen?
- 8. Wie kann ich MySQL-Abfragen protokollieren?
- 9. Wie kann ich diese Abfragen optimieren?
- 10. Wie kann ich Kapitelmetadaten von einer m4a-Datei abfragen?
- 11. Wie kann ich diese Abfragen kombinieren?
- 12. aws cli: Wie kann ich Listenwerte abfragen?
- 13. Erstellen Sie Tabelle in Worddokument aus Zugriff mit VBA
- 14. Wie kann ich rohe via Eloquent abfragen?
- 15. AngularFire - Wie kann ich denormalisierte Daten abfragen?
- 16. Wie kann ich die Delphi-Komponentenpalette abfragen?
- 17. Wie kann ich MySQL mit node.js abfragen?
- 18. Wie kann ich in JPA "älter als drei Minuten" abfragen?
- 19. Wie kombiniere ich zwei Abfragen (union all) in einer Zeile?
- 20. Wie kann ich in SQLAlchemy zusammengesetzte Primärschlüssel abfragen?
- 21. Wie kann ich mehrere Zeichenfolgen in mehreren Abfragen ersetzen?
- 22. Wie kann ich Suchbegriffe in effizientere Abfragen bündeln?
- 23. JDBC: Wie kann ich in Oracle nach Zeit abfragen?
- 24. Warum kann ich SolrJ nicht nach einer URL abfragen?
- 25. Wie exportiere ich benannte Abfragen in einer Hibernate Annotations App?
- 26. Kann ich ausstehende Abfragen während einer InnoDB-Transaktion abrufen?
- 27. Wie kann ich zwei Abfragen in einem machen?
- 28. Wie kann ich geschachtelte Abfragen in Laravel Eloquent erreichen?
- 29. Wie kann ich zählen, wie viele SQL-Abfragen den Winterschlaf in einer Grails-Anfrage machen?
- 30. Wie 2 Abfragen in einer Funktion haben?
Ich lese deine Beiträge zu Open XML - großartige Arbeit! –