Chciałbym przesłać plik docx programu Word 2007 lub lepszy na mój serwer sieciowy i przekonwertować spis treści na prostą strukturę xml. Robiąc to na pulpicie z tradycyjnym VBA wydaje się, że byłoby to łatwe. Przeglądanie danych XML WordProcessingML używanych do utworzenia pliku docx jest mylące. Czy istnieje sposób (bez COM) do poruszania się po dokumencie w bardziej zorientowany obiektowo sposób?Jak mogę wykonać zapytanie do pliku docx programu Word w aplikacji ASP.NET?
Odpowiedz
Bardzo polecam zajrzeć do Open XML SDK 2.0. To CTP, ale okazało się, że jest to niezwykle użyteczne w manipulowaniu plikami xmlx bez konieczności radzenia sobie z COM. Dokumentacja jest nieco pobieżna, ale kluczową rzeczą, której należy szukać, jest klasa DocumentFormat.OpenXml.Packaging.WordprocessingDocument. Możesz wybrać dokument .docx, jeśli zmienisz nazwę rozszerzenia na .zip i przekopiesz tam pliki XML. Robiąc to, wygląda na to, że Spis treści znajduje się w tagu "Dokument strukturalny", a rzeczy takie jak nagłówki znajdują się w hiperłączu. Zamieszanie z tym trochę, stwierdziłem, że coś takiego powinno działać (lub przynajmniej dać punkt wyjścia).
Jako punkt wyjścia patrz XML Documents and Data. W szczególności będziesz chciał użyć LINQ do XML.
Ogólnie rzecz biorąc, nie chcesz używać modelu COM w aplikacji .NET.
Oto blog na temat wysyłania zapytań do Open XML WordProcessingML przy użyciu LINQ do XML. Używając tego kodu można napisać kwerendę w następujący sposób:
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);
}
}
post na blogu: Open XML SDK and LINQ to XML
-Eric
czytam twoje posty na temat Open XML - wielkiego dzieła! –