Partager via


Schémas et données XML (Visual Studio Tools pour Office)

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

  • Version 2007 de Microsoft Office System

  • Microsoft Office 2003

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

Microsoft Office Excel et Microsoft Office Word proposent une fonctionnalité qui permet de mapper des schémas à vos documents. Cette fonctionnalité peut simplifier l'importation et l'exportation de données XML vers et depuis les documents en question.

Remarque :

Vous ne pouvez pas utiliser des schémas XML multipart dans les solutions Excel.

Visual Studio Tools pour Office expose des éléments de schéma mappés dans des personnalisations au niveau du document sous forme de contrôles dans le modèle de programmation. Dans Excel, Visual Studio Tools pour Office prend en charge la liaison des contrôles aux données dans les bases de données, les services Web et les objets. Dans Word et Excel, Visual Studio Tools pour Office prend en charge des volets Actions, qui peuvent être utilisés avec un document mappé par schéma afin d'améliorer l'expérience de l'utilisateur final qui utilise vos solutions. Pour plus d'informations, consultez Vue d'ensemble du volet Actions.

Objets créés lorsque les schémas sont joints aux classeurs Excel

Lorsque vous joignez un schéma à un classeur, Visual Studio crée automatiquement plusieurs objets et les ajoute à votre projet. Ces objets ne doivent pas être supprimés à l'aide d'outils Visual Studio car ils sont gérés par Excel. Pour les supprimer, retirez les éléments mappés de la feuille de calcul ou détachez le schéma à l'aide des outils Excel.

Il existe deux objets principaux :

  • Schéma XML (fichier XSD). Pour chaque schéma du classeur, Visual Studio ajoute un schéma au projet. Celui-ci apparaît comme un élément de projet avec une extension XSD dans l'Explorateur de solutions.

  • Classe DataSet typée. Cette classe est créée en fonction du schéma. Cette classe DataSet est visible dans Affichage de classes.

Objets créés lorsque les éléments de schéma sont mappés aux feuilles de calcul Excel

Lorsque vous mappez un élément de schéma du volet de tâches Source XML à une feuille de calcul, Visual Studio crée automatiquement plusieurs objets et les ajoute à votre projet :

  • Contrôles. Pour chaque objet mappé dans le classeur, un contrôle XmlMappedRange (pour les éléments de schéma non répétitifs) ou un contrôle ListObject (pour les éléments de schéma répétitifs) est créé dans le modèle de programmation. Le contrôle ListObject peut être supprimé uniquement en supprimant les mappages et les objets mappés du classeur. Pour plus d'informations sur les contrôles, consultez Vue d'ensemble des éléments hôtes et des contrôles hôtes.

  • BindingSource. Lorsque vous créez un XmlMappedRange en mappant un élément de schéma non récurrent à la feuille de calcul, un BindingSource est créé et le contrôle XmlMappedRange est lié au BindingSource. Vous devez lier le BindingSource à une instance de la source de données qui correspond au schéma mappé au document, comme une instance de la classe DataSet typée qui a été créée. Créez la liaison en définissant les propriétés DataSource et DataMember qui sont exposées dans la fenêtre Propriétés.

    Remarque :

    Le BindingSource n'est pas créé pour les objets ListObject. Vous devez lier manuellement le ListObject à la source de données à l'aide des propriétés DataSource et DataMember de la fenêtre Propriétés.

Schémas mappés Office et fenêtre Sources de données Visual Studio

Les fonctionnalités de schéma mappé d'Office et la fenêtre Sources de données de Visual Studio peuvent vous aider à présenter des données sur une feuille de calcul Excel pour la modification ou la création de rapports. Dans les deux cas, vous pouvez faire glisser des éléments de données sur la feuille de calcul Excel. Les deux méthodes créent des contrôles qui sont liés aux données via un BindingSource dans une source de données telle qu'un DataSet ou un service Web.

Remarque :

Lorsque vous mappez un élément de schéma répétitif à une feuille de calcul, Visual Studio Tools pour Office crée un ListObject. Le ListObject n'est pas lié automatiquement aux données via le BindingSource. Vous devez lier manuellement le ListObject à la source de données à l'aide des propriétés DataSource et DataMember de la fenêtre Propriétés.

Le tableau suivant présente une série de différences entre les deux méthodes.

Schéma XML

Fenêtre Sources de données

Utilise l'interface Office.

Utilise la fenêtre Sources de données dans Visual Studio.

Active les fonctionnalités Office intégrées pour importer et exporter des données de fichiers XML.

Vous devez fournir par programme des fonctionnalités d'importation et d'exportation.

Vous devez écrire du code pour remplir les contrôles générés avec des données.

Le code des contrôles ajoutés à partir de la fenêtre Sources de données est généré automatiquement pour les remplir, ainsi que les chaînes de connexion nécessaires lorsque vous utilisez des serveurs de base de données.

Comportement lorsque les schémas sont joints aux documents Word

Aucun objet de données n'est créé lorsque vous joignez un schéma à un document Word utilisé dans un projet Visual Studio Tools pour Office au niveau du document. Toutefois, lorsque vous mappez un élément de schéma à votre document, des contrôles sont créés. Le type de contrôle dépend du type d'élément que vous mappez ; les éléments répétitifs génèrent des contrôles XMLNodes, et les éléments non répétitifs génèrent des contrôles XMLNode. Pour plus d'informations, consultez XMLNodes, contrôle et XMLNode, contrôle.

Déploiement de solutions qui incluent des schémas XML

Vous devez créer un programme d'installation pour déployer une solution qui utilise un schéma XML mappé à un document. Le programme d'installation doit enregistrer le schéma dans la bibliothèque de schémas sur l'ordinateur de l'utilisateur. Si vous n'enregistrez pas le schéma, la solution fonctionne encore car Word génère un schéma temporaire basé sur les éléments qui sont dans le document lorsque l'utilisateur l'ouvre. Toutefois, l'utilisateur ne peut pas effectuer une validation ou enregistrer le schéma utilisé pour créer le projet. Pour plus d'informations sur les programmes d'installation, consultez Déploiement d'applications et de composants.

Vous pouvez également ajouter du code à votre projet pour vérifier si le schéma est dans la bibliothèque et s'il est enregistré. Si ce n'est pas le cas, vous pouvez avertir l'utilisateur.

' Ensure that the schema is in the library and registered with the document.
Private Function CheckSchema() As Boolean

    Const namespaceUri As String = "http://schemas.contoso.com/projects"
    Dim namespaceFound As Boolean = False
    Dim namespaceRegistered As Boolean = False

    Dim n As Word.XMLNamespace
    For Each n In Application.XMLNamespaces
        If (n.URI = namespaceUri) Then
            namespaceFound = True
        End If
    Next

    If Not namespaceFound Then
        MessageBox.Show("XML Schema is not in library.")
        Return False
    End If

    Dim r As Word.XMLSchemaReference
    For Each r In Me.XMLSchemaReferences
        If (r.NamespaceURI = namespaceUri) Then
            namespaceRegistered = True
        End If
    Next

    If Not namespaceRegistered Then
        MessageBox.Show("XML Schema is not registered for this document.")
        Return False
    End If

    Return True
End Function
// Ensure that the schema is in the library and registered with the document.
private bool CheckSchema()
{
    const string namespaceUri = "http://schemas.contoso.com/projects";
    bool namespaceFound = false;
    bool namespaceRegistered = false;

    foreach (Word.XMLNamespace n in Application.XMLNamespaces)
    {
        if (n.URI == namespaceUri)
        {
            namespaceFound = true;
        }
    }

    if (!namespaceFound)
    {
        MessageBox.Show("XML Schema is not in library.");
        return false;
    }

    foreach (Word.XMLSchemaReference r in this.XMLSchemaReferences) 
    {
        if (r.NamespaceURI == namespaceUri)
        {
            namespaceRegistered = true;
        }
    }

    if (!namespaceRegistered)
    {
        MessageBox.Show("XML Schema is not registered for this document.");
        return false;
    }

    return true;
}

Voir aussi

Tâches

Comment : mapper des schémas à des documents Word dans Visual Studio

Comment : mapper des schémas à des feuilles de calcul dans Visual Studio