Bonjour,

Je poste ce message car je suis bloqué depuis (trop) longtemps sur mon projet.

Je dois créer une application C# qui permette d'insérer du texte dans un document word .docx. J'ai cherché un peu partout, j'ai fait des tests en utilisant XML, LinqToXml. Je connais un peu la structure des fichiers xml présents dans un docx, les noeuds et leur contenu, mais je ne sais pas comment y accéder. J'ai actuellement ce code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
private void button1_Click(object sender, EventArgs e)
        {
            docWord = @"monFichier.docx";
 
            //overture du package en lecture/écriture
            Package officePackage = Package.Open(docWord, FileMode.Open, FileAccess.ReadWrite);
            MessageBox.Show("Fichier chargé avec succès", "Réussi", MessageBoxButtons.OK);
            //mettre ici le code des traitements
 
            //type de contenu pour la partie principale
            const String officeDocRelType = @"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
 
            PackagePart corePart = null;
            Uri documentUri = null;
            //on récupère la partie contenant les propriétés
            foreach (PackageRelationship relationship in officePackage.GetRelationshipsByType(officeDocRelType))
            {
                // Il n'y a qu'une seule partie de type partType dans le package
                documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative), relationship.TargetUri);
                corePart = officePackage.GetPart(documentUri);
                break;
            }
 
            if (corePart != null)
            {
                 string cpPropertiesSchema = "http://schemas.openxmlformats.org/package/2006/metadata/core-properties";
                 string dcPropertiesSchema = "http://purl.org/dc/elements/1.1/";
                 string dcTermsPropertiesSchema = "http://purl.org/dc/terms/";
 
                //construction d'un XmlNamespaceManager contenant les namespaces utilisés
                NameTable nt = new NameTable();
                XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
                nsmgr.AddNamespace("dc", dcPropertiesSchema);
                nsmgr.AddNamespace("cp", cpPropertiesSchema);
                nsmgr.AddNamespace("dcterms", dcTermsPropertiesSchema);
 
                //chargement de la partie dans un XmlDocument
                XmlDocument doc = new XmlDocument(nt);
                doc.Load(corePart.GetStream());
 
                XmlNode nodeAuteur = doc.DocumentElement.SelectSingleNode("//dc:creator", nsmgr);
                if (nodeAuteur != null)
                    labelAuteur.Text = nodeAuteur.InnerText;
 
                XmlNode nodeTitre = doc.DocumentElement.SelectSingleNode("//dc:title", nsmgr);
                if (nodeTitre != null)
                    labelTitre.Text = nodeTitre.InnerText;
 
                XmlNode nodeMotsClefs = doc.DocumentElement.SelectSingleNode("//cp:keywords", nsmgr);
                if (nodeMotsClefs != null)
                    labelMotsClefs.Text = nodeMotsClefs.InnerText;
 
                XmlNode nodeDate = doc.DocumentElement.SelectSingleNode("//dcterms:created", nsmgr);
                if (nodeDate != null)
                    labelDate.Text = DateTime.Parse(nodeDate.InnerText).ToShortDateString();
            }
 
 
 
            //On ferme le package pour éviter un rechargement par erreur
            officePackage.Close();
}
Mais mes labels ne changent pas, rien ne se produit visuellement lors du clic sur le bouton.

Je ne comprends pas comment identifier un noeud et afficher/modifier son contenu.
Les directives using suivantes sont insérées dans mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using System.IO.Packaging;
Et je n'ai aucune erreur générée venant d'un éventuel problème d'assembly.

Je suis complètement paumé (excusez le terme) et j'aurais besoin d'un peu d'aide...

Merci d'avance,

Martin