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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top