Как я могу запросить документ Word в приложении ASP.NET?
-
18-09-2019 - |
Вопрос
Я хотел бы загрузить docx-файл Word 2007 или более поздней версии на свой веб-сервер и преобразовать оглавление в простую структуру XML.Кажется, что сделать это на рабочем столе с помощью традиционного VBA было бы легко.Просмотр XML-данных WordprocessingML, использованных для создания файла docx, сбивает с толку.Есть ли способ (без COM) перемещаться по документу более объектно-ориентированным способом?
Решение
Я настоятельно рекомендую изучить Открытый 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);
}
Другие советы
Вот сообщение в блоге о запросах документов 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
-Эрик
Видеть XML-документы и данные в качестве отправной точки.В частности, вам захочется использовать LINQ to XML.
В общем, вы не хотите использовать COM в приложении .NET.