Partager via


Procédure pas à pas : liaison de contrôles de contenu à des parties XML personnalisées

Mise à jour : novembre 2007

S'applique à

Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et versions de Microsoft Office spécifiés.

Type de projet

  • Projets au niveau du document

Version de Microsoft Office

  • Word 2007

Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet.

Cette procédure pas à pas montre comment lier des contrôles de contenu dans une personnalisation au niveau du document pour Word 2007 à des données XML stockées dans ce document.

Word 2007 vous permet de stocker des données XML, appelées « parties XML personnalisées », dans un document. Vous pouvez déterminer l'affichage de ces données en liant des contrôles de contenu à des éléments d'une partie XML personnalisée. L'exemple de document présenté dans cette procédure affiche des informations sur les employés stockées dans une partie XML personnalisée. Lorsque vous ouvrez le document, le contenu détermine l'affichage des valeurs des éléments XML. Toutes les modifications apportées au texte dans les contrôles de contenu sont enregistrées dans la partie XML personnalisée.

Cette procédure pas à pas illustre les tâches suivantes :

  • Ajout de contrôles de contenu au document Word dans un projet au niveau du document au moment du design.

  • Création d'un fichier de données XML et d'un schéma XML qui définit les éléments à lier aux contrôles de contenu.

  • Liaison du schéma XML au document au moment du design.

  • Ajout du contenu du fichier XML à une partie XML personnalisée dans le document au moment de l'exécution.

  • Liaison des contrôles de contenu aux éléments de la partie XML personnalisée.

  • Liaison de DropDownListContentControl à un jeu de valeurs définies dans le schéma XML.

Remarque :

Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.

Composants requis

Vous avez besoin des composants suivants pour exécuter cette procédure pas à pas :

  • Visual Studio Tools pour Office (composant facultatif de Visual Studio 2008 Professional et Visual Studio Team System)

  • Microsoft Office Word 2007.

Visual Studio Tools pour Office est installé par défaut avec les versions répertoriées de Visual Studio. Pour vérifier s'il est installé, consultez Installation de Visual Studio Tools pour Office.

Création d'un projet de document Word

Créez un document Word 2007 que vous utiliserez dans le cadre de cette procédure pas à pas.

Pour créer un projet de document Word 2007

  • Créez un projet de document Word portant le nom ContrôlesEmployé à l'aide du modèle de projet de document Word pour la version 2007 de Microsoft Office System. Créez un document pour la solution. Pour plus d'informations, consultez Comment : créer des projets Visual Studio Tools pour Office.

    Visual Studio ouvre le nouveau document Word dans le concepteur et ajoute le projet ContrôlesEmployé à l'Explorateur de solutions.

Ajout de contrôles de contenu au document

Créez un tableau contenant trois types différents de contrôles de contenu où l'utilisateur peut afficher ou modifier des informations à propos d'un employé.

Pour ajouter des contrôles de contenu au document

  1. Dans le document Word hébergé dans le concepteur Visual Studio, sur le ruban, cliquez sur l'onglet Insertion.

  2. Dans le groupe Tableaux, cliquez sur Tableau, puis insérez un tableau comportant 2 colonnes et 3 lignes.

  3. Tapez du texte dans la première colonne de manière à obtenir quelque chose qui ressemble à ceci :

    Nom de l'employé

    Date d'embauche

    Nom

  4. Dans la deuxième colonne du tableau, cliquez sur la première ligne (en regard de Nom de l'employé).

  5. Dans le ruban, cliquez sur l'onglet Développeur.

    Remarque :

    Si l'onglet Développeur n'est pas visible, vous devez d'abord l'afficher. Pour plus d'informations, consultez Comment : afficher l'onglet Développeur sur le ruban.

  6. Dans le groupe Contrôles, cliquez sur le bouton Texte pour ajouter PlainTextContentControl à la première cellule.

  7. Dans la deuxième colonne du tableau, cliquez sur la deuxième ligne (en regard de Date d'embauche).

  8. Dans le groupe Contrôles, cliquez sur le bouton Sélecteur de dates pour ajouter DatePickerContentControl à la deuxième cellule.

  9. Dans la deuxième colonne du tableau, cliquez sur la troisième ligne (en regard de Titre).

  10. Dans le groupe Contrôles, cliquez sur le bouton Liste déroulante pour ajouter DropDownListContentControl à la dernière cellule.

Vous disposez à présent de l'interface utilisateur entière pour ce projet. Si vous exécutez le projet maintenant, vous pouvez taper du texte dans la première ligne et sélectionner une date dans la deuxième ligne. L'étape suivante consiste à lier les données à afficher au document dans un fichier XML.

Création du fichier de données XML

En général, vous obtenez des données XML à stocker dans une partie XML personnalisée d'une source externe, telle qu'un fichier ou une base de données. Dans cette procédure pas à pas, vous créez un fichier XML qui contient les données d'employé, accompagnées des éléments que vous souhaitez lier aux contrôles de contenu du document. Pour que les données soient disponibles pendant l'exécution, incorporez le fichier XML en tant que ressource dans l'assembly de personnalisation.

Pour créer le fichier de données

  1. Dans le menu Projet, cliquez sur Ajouter un nouvel élément.

    La boîte de dialogue Ajouter un nouvel élément s'affiche alors.

  2. Dans le volet Modèles, sélectionnez Fichier XML.

  3. Nommez le fichier employés.xml, puis cliquez sur Ajouter.

    Le fichier employés.xml s'ouvre dans l'Éditeur de code.

  4. Remplacez le contenu du fichier employés.xml par le texte ci-dessous.

    <?xml version="1.0" encoding="utf-8" ?>
    <employees xmlns="https://schemas.microsoft.com/vsto/samples">
      <employee>
        <name>Karina Leal</name>
        <hireDate>1999-04-01</hireDate>
        <title>Manager</title>
      </employee>
    </employees>
    
  5. Dans l'Explorateur de solutions, cliquez sur employés.xml.

  6. Dans la fenêtre Propriétés, sélectionnez la propriété Action de génération, puis remplacez la valeur par Ressource incorporée.

    Cette étape incorpore le fichier XML en tant que ressource dans l'assembly lorsque vous générez le projet. Vous pouvez ainsi accéder au contenu du fichier XML au moment de l'exécution.

Création d'un schéma XML

Si vous souhaitez lier un contrôle de contenu à un élément d'une partie XML personnalisée, vous ne devez pas utiliser de schéma XML. Toutefois, pour lier DropDownListContentControl à un jeu de valeurs, vous devez créer un schéma XML qui valide le fichier de données XML créé précédemment. Le schéma XML définit les valeurs possibles pour l'élément title. À une étape ultérieure de cette procédure, vous lierez DropDownListContentControl à cet élément.

Pour créer un schéma XML

  1. Dans le menu Projet, cliquez sur Ajouter un nouvel élément.

    La boîte de dialogue Ajouter un nouvel élément s'affiche alors.

  2. Dans le volet Modèles, sélectionnez Schéma XML.

  3. Nommez le schéma employés.xsd, puis cliquez sur Ajouter.

    Le concepteur de schéma s'ouvre.

  4. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur employés.xsd, puis cliquez sur Afficher le code.

  5. Remplacez le contenu du fichier employés.xsd par le schéma suivant.

    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema xmlns="https://schemas.microsoft.com/vsto/samples" 
        targetNamespace="https://schemas.microsoft.com/vsto/samples"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">
      <xs:element name="employees" type="EmployeesType"></xs:element>
      <xs:complexType name="EmployeesType">
        <xs:all>
          <xs:element name="employee" type="EmployeeType"/>
        </xs:all>
      </xs:complexType>
      <xs:complexType name="EmployeeType">
        <xs:sequence>
          <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
          <xs:element name="hireDate" type="xs:date" minOccurs="1" maxOccurs="1"/>
          <xs:element name="title" type="TitleType" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
      </xs:complexType>
      <xs:simpleType name="TitleType">
        <xs:restriction base="xs:string">
          <xs:enumeration value ="Engineer"/>
          <xs:enumeration value ="Designer"/>
          <xs:enumeration value ="Manager"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:schema>
    
  6. Dans le menu Fichier, cliquez sur Enregistrer tout pour enregistrer les modifications apportées aux fichiers employés.xml et employés.xsd.

Liaison du schéma XML au document

Vous devez joindre le schéma XML au document afin de lier DropDownListContentControl aux valeurs valides de l'élément title.

Pour joindre le schéma XML au document

  1. Activez ContrôlesEmployé.docx dans le concepteur.

  2. Dans le ruban, cliquez sur l'onglet Développeur.

  3. Dans le groupe XML, cliquez sur Schéma.

  4. Dans la boîte de dialogue Modèles et compléments, cliquez sur l'onglet Schéma XML, puis sur Ajouter un schéma.

  5. Accédez au schéma employés.xsd créé précédemment et situé dans le répertoire du projet, puis cliquez sur Ouvrir.

  6. Cliquez sur OK dans la boîte de dialogue Paramètres du schéma.

  7. Cliquez sur OK pour fermer la boîte de dialogue Modèles et compléments.

    Le volet de tâches Structure XML s'affiche.

  8. Fermez le volet de tâches Structure XML.

Ajout d'une partie XML personnalisée au document

Pour lier les contrôles de contenu aux éléments du fichier XML, vous devez d'abord ajouter le contenu du fichier XML à une nouvelle partie XML personnalisée dans le document.

Pour ajouter une partie XML personnalisée au document

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur ThisDocument.cs ou ThisDocument.vb, puis sélectionnez Afficher le code.

  2. Ajoutez les déclarations suivantes à la classe ThisDocument. Ce code déclare plusieurs objets servant à ajouter une partie XML personnalisée au document.

    <Cached()> _
    Public employeeXMLPartID As String = String.Empty
    Private employeeXMLPart As Office.CustomXMLPart
    Private Const prefix As String = "xmlns:ns='https://schemas.microsoft.com/vsto/samples'"
    
    [CachedAttribute()]
    public string employeeXMLPartID = string.Empty;
    private Office.CustomXMLPart employeeXMLPart;
    private const string prefix = "xmlns:ns='https://schemas.microsoft.com/vsto/samples'";
    
  3. Ajoutez la méthode suivante à la classe ThisDocument. Cette méthode extrait le contenu du fichier de données XML incorporé comme ressource dans l'assembly, puis retourne le contenu sous la forme d'une chaîne XML.

    Private Function GetXmlFromResource() As String
        Dim asm As System.Reflection.Assembly = _
            System.Reflection.Assembly.GetExecutingAssembly()
        Dim stream1 As System.IO.Stream = asm.GetManifestResourceStream( _
                "EmployeeControls.employees.xml")
    
        Using resourceReader As System.IO.StreamReader = _
            New System.IO.StreamReader(stream1)
            If resourceReader IsNot Nothing Then
                Return resourceReader.ReadToEnd()
            End If
        End Using
    
        Return Nothing
    End Function
    
    private string GetXmlFromResource()
    {
        System.Reflection.Assembly asm =
            System.Reflection.Assembly.GetExecutingAssembly();
        System.IO.Stream stream1 = asm.GetManifestResourceStream(
            "EmployeeControls.employees.xml");
    
        using (System.IO.StreamReader resourceReader =
                new System.IO.StreamReader(stream1))
        {
            if (resourceReader != null)
            {
                return resourceReader.ReadToEnd();
            }
        }
    
        return null;
    }
    
  4. Ajoutez la méthode suivante à la classe ThisDocument. La méthode AddCustomXmlPart crée une partie XML personnalisée qui contient une chaîne XML passée à la méthode.

    Pour garantir que la partie XML personnalisée n'est créée qu'une seule fois, la méthode crée cette partie uniquement si aucune partie XML personnalisée comportant un GUID correspondant n'existe dans le document. Lors de son premier appel, cette méthode enregistre la valeur de la propriété Microsoft.Office.Interop.Word.CustomXMLPart.Id dans la chaîne employeeXMLPartID. La valeur de la chaîne employeeXMLPartID est rendue persistante dans le document car elle a été déclarée à l'aide de l'attribut CachedAttribute.

    Private Sub AddCustomXmlPart(ByVal xmlData As String)
        If xmlData IsNot Nothing Then
    
            employeeXMLPart = Me.CustomXMLParts.SelectByID(employeeXMLPartID)
            If (employeeXMLPart Is Nothing) Then
                employeeXMLPart = Me.CustomXMLParts.Add(xmlData)
                employeeXMLPart.NamespaceManager.AddNamespace("ns", _
                    "https://schemas.microsoft.com/vsto/samples")
                employeeXMLPartID = employeeXMLPart.Id
            End If
        End If
    End Sub
    
    private void AddCustomXmlPart(string xmlData)
    {
        if (xmlData != null)
        {
            employeeXMLPart = this.CustomXMLParts.SelectByID(employeeXMLPartID);
            if (employeeXMLPart == null)
            {
                employeeXMLPart = this.CustomXMLParts.Add(xmlData, missing);
                employeeXMLPart.NamespaceManager.AddNamespace("ns", 
                    @"https://schemas.microsoft.com/vsto/samples");
                employeeXMLPartID = employeeXMLPart.Id;
            }
        }
    }
    

Liaison des contrôles de contenu aux éléments de la partie XML personnalisée

Liez chaque contrôle de contenu à un élément de la partie XML personnalisée à l'aide de la propriété XMLMapping de chaque contrôle de contenu.

Pour lier les contrôles de contenu aux éléments de la partie XML personnalisée

  • Ajoutez la méthode suivante à la classe ThisDocument. Cette méthode lie chaque contrôle de contenu à un élément de la partie XML personnalisée et définit le format d'affichage de la date de DatePickerContentControl.

    Private Sub BindControlsToCustomXmlPart()
        Dim xPathName As String = "ns:employees/ns:employee/ns:name"
        Me.PlainTextContentControl1.XMLMapping.SetMapping(xPathName, _
            prefix, employeeXMLPart)
    
        Dim xPathDate As String = "ns:employees/ns:employee/ns:hireDate"
        Me.DatePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy"
        Me.DatePickerContentControl1.XMLMapping.SetMapping(xPathDate, _
            prefix, employeeXMLPart)
    
        Dim xPathTitle As String = "ns:employees/ns:employee/ns:title"
        Me.DropDownListContentControl1.XMLMapping.SetMapping(xPathTitle, _
            prefix, employeeXMLPart)
    End Sub
    
    private void BindControlsToCustomXmlPart()
    {
        string xPathName = "ns:employees/ns:employee/ns:name";
        this.plainTextContentControl1.XMLMapping.SetMapping(xPathName,
            prefix, employeeXMLPart);
    
        string xPathDate = "ns:employees/ns:employee/ns:hireDate";
        this.datePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy";
        this.datePickerContentControl1.XMLMapping.SetMapping(xPathDate,
            prefix, employeeXMLPart);
    
        string xPathTitle = "ns:employees/ns:employee/ns:title";
        this.dropDownListContentControl1.XMLMapping.SetMapping(xPathTitle,
            prefix, employeeXMLPart);
    }
    

Exécution du code à l'ouverture du document

Créez la partie XML personnalisée et liez les contrôles personnalisés aux données lorsque le document est ouvert.

Pour exécuter le code à l'ouverture du document

  • Ajoutez le code suivant à la méthode ThisDocument_Startup de la classe ThisDocument. Ce code extrait la chaîne XML du fichier employés.xml, ajoute la chaîne XML à une nouvelle partie XML personnalisée du document, puis lie les contrôles de contenu aux éléments de la partie XML personnalisée.

    Dim xmlData As String = GetXmlFromResource()
    If xmlData IsNot Nothing Then
        AddCustomXmlPart(xmlData)
        BindControlsToCustomXmlPart()
    End If
    
    string xmlData = GetXmlFromResource();
    
    if (xmlData != null)
    {
        AddCustomXmlPart(xmlData);
        BindControlsToCustomXmlPart();
    }
    

Test du projet

Lorsque vous ouvrez le document, les contrôles de contenu affichent les données issues des éléments de la partie XML personnalisée. Cliquez sur DropDownListContentControl pour sélectionner l'une de trois valeurs valides pour l'élément title, définies dans le fichier employés.xsd. Si vous modifiez les données d'un contrôle de contenu, les nouvelles valeurs sont enregistrées dans la partie XML personnalisée du document.

Pour tester les contrôles de contenu

  1. Appuyez sur F5 pour exécuter le projet.

  2. Assurez-vous que le tableau du document se présente comme suit. Chaque chaîne de la deuxième colonne dérive d'un élément de la partie XML personnalisée dans le document.

    Nom de l'employé

    Carine Loyal

    Date d'embauche

    1 avril 1999

    Nom

    Responsable

  3. Cliquez dans la cellule à droite de Nom de l'employé et tapez un autre nom.

  4. Cliquez dans la cellule à droite de Date d'embauche et sélectionnez une autre date dans le sélecteur de dates.

  5. Cliquez dans la cellule à droite de la cellule Titre et sélectionnez un nouvel élément dans la liste déroulante.

  6. Enregistrez et fermez le document.

  7. Dans l'Explorateur Windows, ouvrez le dossier \bin\Debug situé dans l'emplacement du projet.

  8. Cliquez avec le bouton droit sur ContrôlesEmployé.docx, puis cliquez sur Renommer.

  9. Attribuez le nom ContrôlesEmployé.docx.zip au fichier.

    Le document ContrôlesEmployé.docx est enregistré au format Open XML. Si vous renommez ce document en lui ajoutant l'extension de nom de fichier .zip, vous pouvez examiner le contenu du document. Pour plus d'informations sur Open XML, consultez l'article technique Introduction aux formats de fichier Open XML.

  10. Double-cliquez sur le fichier ContrôlesEmployé.docx.zip.

  11. Double-cliquez sur le dossier customXml.

  12. Cliquez avec le bouton droit sur item2.xml, puis cliquez sur Ouvrir.

    Ce fichier contient la partie XML personnalisée que vous avez ajoutée au document.

  13. Vérifiez que les éléments name, hireDate et title contiennent les nouvelles valeurs entrées dans les contrôles de contenu du document.

  14. Fermez le fichier item2.xml.

Étapes suivantes

Pour en savoir plus sur l'utilisation des contrôles de contenu, consultez les rubriques suivantes :

Voir aussi

Tâches

Comment : ajouter des contrôles de contenu à des documents Word

Comment : protéger des parties de documents à l'aide de contrôles de contenu

Concepts

Contrôles de contenu

Vue d'ensemble des éléments hôtes et des contrôles hôtes

Limitations de programmation des éléments hôtes et des contrôles hôtes

Ajout de contrôles à des documents Office au moment de l'exécution

Méthodes d'assistance pour les contrôles hôtes

Autres ressources

Contrôles hôtes Word