Como posso consultar uma Palavra docx em um ASP.NET app?
-
18-09-2019 - |
Pergunta
Eu gostaria de fazer o upload de um Word 2007 ou superior docx arquivo para meu servidor web e converter a tabela de conteúdos para uma simples estrutura xml.Fazer isso no ambiente de trabalho com a tradicional VBA parece que ele teria sido fácil.Olhando para o WordprocessingML dados XML usado para criar o arquivo docx é confuso.Existe uma maneira (sem COM) para navegar no documento em mais de um object-oriented moda?
Solução
Eu recomendo a olhar para o Open XML SDK 2.0.É um CTP, mas eu achei extremamente úteis na manipulação de xmlx arquivos sem ter que lidar com em tudo.A documentação é um pouco impreciso, mas a principal coisa a procurar é o DocumentFormat.OpenXml.Embalagem.WordprocessingDocument classe.Você pode escolher para além do .o documento docx se você renomear a extensão .zip e cavar os arquivos XML lá.Fazendo isso, ele se parece com uma Tabela de Conteúdo está contido em um "Documento Estruturado" tag e que coisas como os títulos estão em um hiperlink a partir de lá.Putzing ao redor com ele um pouco, achei que algo como isso deve funcionar (ou pelo menos dar um ponto de partida).
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);
}
Outras dicas
Aqui é um blog sobre consultar XML Abertos do WordprocessingML documentos usando LINQ to XML.Usando esse código, você pode escrever uma consulta da seguinte forma:
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 no Blog: Open XML SDK e o LINQ to XML
-Eric
Ver Documentos XML e Dados como um ponto de partida.Em particular, você vai querer usar o LINQ to XML.
Em geral, você não deseja utilizar COM um .NET aplicação.