Question

Je voudrais télécharger un Word 2007 ou plus docx à mon serveur web et convertir la table des matières à une structure simple xml. Faire cela sur le bureau avec VBA traditionnelle semble que cela aurait été facile. En regardant les données XML WordprocessingML utilisées pour créer le fichier docx est source de confusion. Est-il possible (sans COM) pour naviguer dans le document en plus d'un mode orienté objet?

Était-ce utile?

La solution

Je recommande fortement de voir si Open XML SDK 2.0 . Il est un CTP, mais je l'ai trouvé extrêmement utile dans la manipulation de fichiers xmlx sans avoir à traiter avec COM du tout. La documentation est un peu louche, mais la chose clé à rechercher est la classe DocumentFormat.OpenXml.Packaging.WordprocessingDocument. Vous pouvez décortiquer le document .docx si vous renommez l'extension .zip et creuser dans les fichiers XML là-bas. De le faire, il ressemble à une table des matières est contenu dans une balise « Document structuré » et que des choses comme les titres sont dans un lien hypertexte à partir de là. Putzing avec elle un peu, je trouve que quelque chose comme cela devrait fonctionner (ou au moins vous donner un point de départ).

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

Autres conseils

Voici un blog sur l'interrogation des documents WordprocessingML Open XML en utilisant LINQ to XML. En utilisant ce code, vous pouvez écrire une requête comme suit:

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: SDK Open XML et LINQ pour XML

-Eric

Voir XML Documents et données comme point de départ. En particulier, vous aurez envie d'utiliser LINQ pour XML.

En général, vous ne voulez pas utiliser COM dans une application .NET.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top