Pregunta

Me gustaría cargar un archivo .docx Word 2007 o mayor a mi servidor web y convertir la tabla de contenido a una estructura XML simple. Hacer esto en el escritorio con el tradicional VBA parece que hubiera sido fácil. En cuanto a los datos XML WordprocessingML utilizados para crear el archivo docx es confuso. ¿Hay alguna manera (sin COM) para navegar por el documento en más de una forma orientada a objetos?

¿Fue útil?

Solución

Me altamente recomiendo mirar en el Open XML SDK 2.0 . Es un CTP, pero he encontrado que es muy útil en la manipulación xmlx archivos sin tener que lidiar con el COM en absoluto. La documentación es un poco rara, pero la clave a buscar es la clase DocumentFormat.OpenXml.Packaging.WordprocessingDocument. Puede desmenuzar el documento .docx si cambia el nombre de la extensión a .zip y escarbar en los archivos XML allí. De hacerlo, se ve como una tabla de contenido está contenida en una etiqueta "Estructurado Documento" y que cosas como los títulos están en un hipervínculo desde allí. Putzing un rato con él un poco, descubrí que algo como esto debería funcionar (o al menos darle un punto 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);
}

Otros consejos

Esta es una entrada de blog en la consulta de documentos XML abierto WordprocessingML utilizando LINQ to XML. El uso de ese código, se puede escribir una consulta de la siguiente manera:

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

Blog post: rel SDK de Open XML y LINQ to XML

-Eric

documentos XML y datos como punto de partida. En particular, tendrá que utilizar LINQ to XML.

En general, usted no desea utilizar COM en una aplicación .NET.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top