Как я могу запросить документ Word в приложении ASP.NET?

Я хочу загрузить файл docx Word 2007 или более поздней версии на свой веб-сервер и преобразовать оглавление в простую структуру xml. Сделать это на рабочем столе с помощью традиционного VBA, похоже, было бы просто. Просмотр XML-данных WordprocessingML, используемых для создания файла docx, сбивает с толку. Есть ли способ (без COM) перемещаться по документу более объектно-ориентированным способом?


person gidmanma    schedule 18.08.2009    source источник


Ответы (3)


Я настоятельно рекомендую изучить Open XML SDK 2.0. Это CTP, но я обнаружил, что он чрезвычайно полезен при работе с xmlx-файлами без необходимости иметь дело с COM. Документация немного отрывочна, но главное, что нужно искать - это класс DocumentFormat.OpenXml.Packaging.WordprocessingDocument. Вы можете разделить документ .docx, если переименуете расширение в .zip и покопаетесь в файлах XML. Таким образом, создается впечатление, что оглавление содержится в теге «Структурированный документ» и что такие вещи, как заголовки, находятся в гиперссылке оттуда. Немного поработав с этим, я обнаружил, что что-то вроде этого должно сработать (или, по крайней мере, дать вам отправную точку).

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);
}
person Jacob Proffitt    schedule 19.08.2009

Вот сообщение в блоге о запросах документов Open XML WordprocessingML с использованием LINQ to XML. Используя этот код, вы можете написать следующий запрос:

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

Сообщение в блоге: Open XML SDK и LINQ to XML

-Эрик

person Eric White    schedule 25.04.2011

См. XML-документы и данные в качестве отправной точки. В частности, вы захотите использовать LINQ to XML.

В общем, вы не хотите использовать COM в приложении .NET.

person John Saunders    schedule 18.08.2009