Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Mise à jour : Juillet 2008
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
Version de Microsoft Office
Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet. |
À compter de Visual Studio 008 Service Pack 1 (SP1), vous pouvez utiliser un complément d'application afin de personnaliser des documents et des classeurs de plusieurs manières. Vous pouvez ainsi :
ajouter des contrôles gérés à tout document ou feuille de calcul ouvert ;
créer des balises actives qui sont reconnues dans un document ou classeur spécifique ;
convertir un objet de liste existant sur une feuille de calcul Excel en un objet de liste Visual Studio Tools pour Office qui expose des événements et peut être lié aux données à l'aide du modèle de liaison de données Windows Forms ;
accéder à des événements au niveau de l'application qui sont exposés par Word et Excel pour des documents, des classeurs et des feuilles de calcul spécifiques.
Pour utiliser cette fonctionnalité, vous devez générer au moment de l'exécution un objet Visual Studio Tools pour Office qui étend le document ou le classeur.
Génération d'objets étendus dans les compléments
Les objets étendus sont des objets Visual Studio Tools pour Office qui ajoutent les fonctionnalités aux objets qui existent en mode natif dans les modèles objet Word ou Excel (appelés objets Office natifs). Pour générer un objet étendu dans votre complément, utilisez la méthode GetVstoObject d'une instance de l'un des types suivants dans les assemblys PIA (Primary Interop Assembly) d'Excel et de Word :
Lorsque vous appelez la méthode GetVstoObject d'un objet Office natif pour la première fois, elle retourne un nouvel objet Visual Studio Tools pour Office qui étend l'objet. Chaque fois que vous appellez la méthode sur le même objet Office natif, elle retourne le même objet étendu.
Le nom du type de l'objet étendu est identique à celui du type de l'objet Office natif, mais le type est défini dans l'espace de noms Microsoft.Office.Tools.Excel ou Microsoft.Office.Tools.Word. Par exemple, la méthode GetVstoObject d'un objet Microsoft.Office.Interop.Word.Document retourne Microsoft.Office.Tools.Word.Document.
Pour déterminer si un objet Visual Studio Tools pour Office a déjà été généré pour un objet Office natif particulier, utilisez la méthode HasVstoObject de l'objet Office. Pour plus d'informations, consultez Déterminer si un objet Office a été étendu.
Les méthodes GetVstoObject sont destinées à être utilisées principalement dans les projets au niveau de l'application. Vous pouvez également les utiliser dans des projets au niveau du document, mais elles se comporteront différemment et auront moins d'applications. Pour plus d'informations, consultez Obtention d'objets étendus à partir d'objets Office natifs dans les personnalisations au niveau du document.
Remarque : |
|---|
Pour utiliser les méthodes GetVstoObject et HasVstoObject dans un fichier de code autre que ThisAddIn.cs ou ThisAddIn.vb, ou dans un projet que vous avez créé avant d'installer SP1, vous devez modifier votre projet. Pour plus d'informations, consultez Configurer votre projet pour utiliser les méthodes GetVstoObject et HasVstoObject. |
Génération d'éléments hôtes
Lorsque vous utilisez la méthode GetVstoObject d'un objet au niveau du document, c'est-à-dire Microsoft.Office.Interop.Excel.Workbook, Microsoft.Office.Interop.Excel.Worksheet ou Microsoft.Office.Interop.Word.Document, l'objet retourné est appelé un élément hôte. Un élément hôte est un type d'élément qui peut contenir d'autres objets, y compris d'autres objets étendus et des contrôles. Il ressemble au type correspondant dans l'assembly PIA (Primary Interop Assembly) Word ou Excel, mais il comporte des fonctionnalités supplémentaires. Pour plus d'informations sur les éléments hôtes, consultez Vue d'ensemble des éléments hôtes et des contrôles hôtes.
Après avoir généré un élément hôte, vous pouvez l'utiliser pour ajouter des balises actives ou des contrôles gérés au document, au classeur ou à la feuille de calcul. Pour plus d'informations, consultez Ajout de balises actives aux documents et classeurs et Ajout de contrôles gérés aux documents et feuilles de calcul.
Pour générer un élément hôte pour un document Word
Utilisez la méthode GetVstoObject de Microsoft.Office.Interop.Word.Document. L'exemple de code suivant génère un élément hôte pour le document actif.
If Globals.ThisAddIn.Application.Documents.Count > 0 Then Dim NativeDocument As Microsoft.Office.Interop.Word.Document = _ Globals.ThisAddIn.Application.ActiveDocument Dim VstoDocument As Microsoft.Office.Tools.Word.Document = _ NativeDocument.GetVstoObject() End Ifif (Globals.ThisAddIn.Application.Documents.Count > 0) { Microsoft.Office.Interop.Word.Document nativeDocument = Globals.ThisAddIn.Application.ActiveDocument; Microsoft.Office.Tools.Word.Document vstoDocument = nativeDocument.GetVstoObject(); }
Pour générer un élément hôte pour un classeur Excel
Utilisez la méthode GetVstoObject de Microsoft.Office.Interop.Excel.Workbook. L'exemple de code suivant génère un élément hôte pour le classeur actif.
Dim NativeWorkbook As Microsoft.Office.Interop.Excel.Workbook = _ Globals.ThisAddIn.Application.ActiveWorkbook If NativeWorkbook IsNot Nothing Then Dim VstoWorkbook As Microsoft.Office.Tools.Excel.Workbook = _ NativeWorkbook.GetVstoObject() End IfMicrosoft.Office.Interop.Excel.Workbook nativeWorkbook = Globals.ThisAddIn.Application.ActiveWorkbook; if (nativeWorkbook != null) { Microsoft.Office.Tools.Excel.Workbook vstoWorkbook = nativeWorkbook.GetVstoObject(); }
Pour générer un élément hôte pour une feuille de calcul Excel
Utilisez la méthode GetVstoObject de Microsoft.Office.Interop.Excel.Worksheet. L'exemple de code suivant génère un élément hôte pour la feuille de calcul active.
Dim NativeSheet As Microsoft.Office.Interop.Excel.Worksheet = _ TryCast(Globals.ThisAddIn.Application.ActiveSheet, _ Microsoft.Office.Interop.Excel.Worksheet) If NativeSheet IsNot Nothing Then Dim VstoSheet As Microsoft.Office.Tools.Excel.Worksheet = _ NativeSheet.GetVstoObject() End IfMicrosoft.Office.Interop.Excel.Worksheet nativeSheet = Globals.ThisAddIn.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet; if (nativeSheet != null) { Microsoft.Office.Tools.Excel.Worksheet vstoSheet = nativeSheet.GetVstoObject(); }
Génération de contrôles hôtes ListObject
Lorsque vous utilisez la méthode GetVstoObject de Microsoft.Office.Interop.Excel.ListObject, elle retourne Microsoft.Office.Tools.Excel.ListObject. Le Microsoft.Office.Tools.Excel.ListObject généré possède toutes les caractéristiques du Microsoft.Office.Interop.Excel.ListObjectd'origine, mais il comporte également des fonctionnalités supplémentaires, telles que la capacité de lier aux données en utilisant le modèle de liaison de données Windows Forms. Pour plus d'informations, consultez ListObject, contrôle.
Pour générer un contrôle hôte pour un ListObject
Utilisez la méthode GetVstoObject de Microsoft.Office.Interop.Excel.ListObject. L'exemple de code suivant génère Microsoft.Office.Tools.Excel.ListObject pour le premier Microsoft.Office.Interop.Excel.ListObject dans la feuille de calcul active.
Dim sheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet If sheet.ListObjects.Count > 0 Then Dim listObject As Excel.ListObject = sheet.ListObjects(1) Dim vstoListObject As Microsoft.Office.Tools.Excel.ListObject = _ listObject.GetVstoObject() End IfMicrosoft.Office.Interop.Excel.Worksheet sheet = Globals.ThisAddIn.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet; if (sheet.ListObjects.Count > 0) { Excel.ListObject listObject = sheet.ListObjects[1]; Microsoft.Office.Tools.Excel.ListObject vstoListObject = listObject.GetVstoObject(); }
Ajout de balises actives aux documents et classeurs
Après avoir généré Microsoft.Office.Tools.Word.Document ou Microsoft.Office.Tools.Excel.Workbook, vous pouvez créer une balise active qui est reconnue dans le contexte du document ou classeur que ces objets représentent. Pour cela, utilisez la propriété VstoSmartTags de Microsoft.Office.Tools.Word.Document ou de Microsoft.Office.Tools.Excel.Workbook. Pour plus d'informations, consultez les rubriques suivantes :
Ajout de contrôles gérés aux documents et feuilles de calcul
Après avoir généré Microsoft.Office.Tools.Word.Document ou Microsoft.Office.Tools.Excel.Worksheet, vous pouvez ajouter des contrôles au document ou à la feuille de calcul que ces objets étendus représentent. Pour cela, utilisez la propriété Controls de Microsoft.Office.Tools.Word.Document ou de Microsoft.Office.Tools.Excel.Worksheet. Pour plus d'informations, consultez Ajout de contrôles à des documents Office au moment de l'exécution.
Vous pouvez ajouter des contrôles Windows Forms ou des contrôles hôtes. Un contrôle hôte est un contrôle Visual Studio Tools pour Office qui encapsule un contrôle correspondant dans l'assembly PIA (Primary Interop Assembly) Word ou Excel. Un contrôle hôte expose l'ensemble du comportement de l'objet Office natif sous-jacent, mais il déclenche également des événements et peut être lié aux données en utilisant le modèle de liaison de données Windows Forms. Pour plus d'informations, consultez Vue d'ensemble des éléments hôtes et des contrôles hôtes.
Remarque : |
|---|
Vous ne pouvez pas ajouter de contrôle XmlMappedRange à une feuille de calcul, ni un contrôle XMLNode ou XMLNodes à un document en utilisant un complément. Ces contrôles ne peuvent pas être ajoutés par programme. Pour plus d'informations, consultez Limitations de programmation des éléments hôtes et des contrôles hôtes. |
Persistance et suppression de contrôles
Lorsque vous ajoutez des contrôles gérés à un document ou à une feuille de calcul, les contrôles ne sont pas rendus persistant lorsque le document est enregistré puis fermé. Tous les contrôles hôtes sont supprimés afin que seuls les objets Office natifs sous-jacents soient conservés (par exemple, Microsoft.Office.Tools.Excel.ListObject devient Microsoft.Office.Interop.Excel.ListObject). Tous les contrôles Windows Forms sont également supprimés, mais leurs wrappers ActiveX sont conservés dans le document. Vous devez inclure le code dans votre complément afin de nettoyer les contrôles, ou de les recréer à la prochaine ouverture du document. Pour plus d'informations, consultez Rendre des contrôles dynamiques persistants dans des documents Office.
Accès aux événements au niveau de l'application sur des documents et des classeurs
Certains événements de document, classeur et feuille de calcul dans les objets Word et Excel natifs sont déclenchés uniquement au niveau de l'application. Par exemple, l'événement DocumentBeforeSave est déclenché lorsqu'un document est ouvert dans Word, mais il est défini dans la classe Microsoft.Office.Interop.Word.Application, plutôt que dans la classe Microsoft.Office.Interop.Word.Document.
Lorsque vous utilisez uniquement des objets Office natifs dans votre complément, vous devez gérer ces événements au niveau de l'application puis écrire du code supplémentaire afin de déterminer si le document qui a déclenché l'événement est un document que vous avez personnalisé. Les éléments hôtes fournissent ces événements au niveau du document, afin qu'il soit plus facile de les gérer pour un document spécifique. Vous pouvez générer un élément hôte puis gérer l'événement pour cet élément hôte.
Exemple avec utilisation d'objets Word natifs
L'exemple de code suivant montre comment gérer un événement au niveau de l'application pour les documents Word. La méthode CreateDocument1 dans cet exemple crée un document, puis définit un gestionnaire d'événements DocumentBeforeSave qui empêche ce document d'être enregistré. Étant donné qu'il s'agit d'un événement au niveau de l'application qui est déclenché pour l'objet Microsoft.Office.Interop.Word.Application, le gestionnaire d'événements doit comparer le paramètre Doc avec l'objet document1 afin de déterminer si document1 représente le document enregistré.
Private document1 As Word.Document = Nothing
Private Sub CreateDocument1()
document1 = Me.Application.Documents.Add()
End Sub
Private Sub Application_DocumentBeforeSave(ByVal Doc As Word.Document, _
ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) _
Handles Application.DocumentBeforeSave
If Type.ReferenceEquals(Doc, document1) Then
Cancel = True
End If
End Sub
private Word.Document document1 = null;
private void CreateDocument1()
{
document1 = this.Application.Documents.Add(ref missing,
ref missing, ref missing, ref missing);
this.Application.DocumentBeforeSave +=
new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(
Application_DocumentBeforeSave);
}
private void Application_DocumentBeforeSave(Word.Document Doc,
ref bool SaveAsUI, ref bool Cancel)
{
if (Type.ReferenceEquals(Doc, document1))
{
Cancel = true;
}
}
Exemple avec utilisation d'un élément hôte
L'exemple de code suivant simplifie ce processus en gérant l'événement BeforeSave d'un élément hôte Microsoft.Office.Tools.Word.Document. La méthode CreateDocument2 dans cet exemple génère un Microsoft.Office.Tools.Word.Document qui étend l'objet document2, puis elle définit un gestionnaire d'événements BeforeSave qui empêche le document d'être enregistré. Étant donné que ce gestionnaire d'événements est appelé uniquement lorsque document2 est enregistré, le gestionnaire d'événements peut annuler l'action de sauvegarde sans avoir à vérifier en plus quel document a été enregistré.
Private document2 As Word.Document = Nothing
Private WithEvents vstoDocument As Microsoft.Office.Tools.Word.Document = Nothing
Private Sub CreateDocument2()
document2 = Me.Application.Documents.Add()
vstoDocument = document2.GetVstoObject()
End Sub
Private Sub vstoDocument_BeforeSave(ByVal sender As Object, _
ByVal e As SaveEventArgs) Handles vstoDocument.BeforeSave
e.Cancel = True
End Sub
private Word.Document document2 = null;
private Microsoft.Office.Tools.Word.Document vstoDocument = null;
private void CreateDocument2()
{
document2 = this.Application.Documents.Add(ref missing,
ref missing, ref missing, ref missing);
vstoDocument = document2.GetVstoObject();
vstoDocument.BeforeSave += new SaveEventHandler(vstoDocument_BeforeSave);
}
private void vstoDocument_BeforeSave(object sender, SaveEventArgs e)
{
e.Cancel = true;
}
Déterminer si un objet Office a été étendu
Pour déterminer si un objet Visual Studio Tools pour Office a déjà été généré pour un objet Office natif particulier, utilisez la méthode HasVstoObject de l'objet Office. Cette méthode retourne la valeur true si un objet étendu a déjà été généré ; sinon, elle retourne la valeur false.
Cela s'avère utile lorsque vous souhaitez exécuter du code uniquement lorsqu'un objet Office spécifié possède un objet étendu. Par exemple, si vous avez un complément Word qui gère l'événement DocumentBeforeSave pour supprimer des contrôles gérés d'un document avant qu'il ne soit enregistré, vous pouvez utiliser la méthode HasVstoObject pour déterminer si le document a été étendu. Si le document n'a pas été étendu, il ne peut pas contenir de contrôles gérés, et par conséquent, le gestionnaire d'événements peut simplement retourner une valeur sans essayer de nettoyer des contrôles sur le document.
Configuration de votre projet pour utiliser les méthodes GetVstoObject et HasVstoObject
Lorsque vous créez un projet au niveau de l'application après avoir installé Visual Studio 2008 SP1, le projet est configuré automatiquement pour que vous utilisiez les méthodes GetVstoObject et HasVstoObject dans les fichiers de code ThisAddIn.cs ou ThisAddIn.vb.
Pour utiliser ces méthodes dans un autre fichier que ThisAddIn.cs ou ThisAddIn.vb, vous devez apporter les modifications suivantes au fichier de code.
Pour modifier un fichier de code dans un projet Excel afin de créer des objets étendus
Ajoutez les instructions using (pour C#) ou Imports (pour Visual Basic) suivantes au début du fichier de code dans lequel vous voulez utiliser les méthodes GetVstoObject et HasVstoObject.
Imports Microsoft.Office.Tools.Excel.Extensionsusing Microsoft.Office.Tools.Excel.Extensions;
Pour modifier un fichier de code dans un projet Word afin de créer des objets étendus
Ajoutez les instructions using (pour C#) ou Imports (pour Visual Basic) suivantes au début du fichier de code dans lequel vous voulez utiliser les méthodes GetVstoObject et HasVstoObject.
Imports Microsoft.Office.Tools.Excel.Extensionsusing Microsoft.Office.Tools.Excel.Extensions;
Pour utiliser ces méthodes dans un projet au niveau de l'application que vous avez créé avant d'installer SP1, vous devez apporter les modifications suivantes à votre projet.
Pour modifier un complément Excel existant afin de créer des objets étendus
Ajoutez une référence à l'assembly Microsoft.Office.Tools.Excel.v9.0.dll.
Ajoutez les instructions using (pour C#) ou Imports (pour Visual Basic) suivantes au début du fichier de code dans lequel vous voulez utiliser les méthodes GetVstoObject et HasVstoObject.
Imports Microsoft.Office.Tools.Excel.Extensionsusing Microsoft.Office.Tools.Excel.Extensions;
Pour modifier un complément Word existant afin de créer des objets étendus
Ajoutez une référence à l'assembly Microsoft.Office.Tools.Word.v9.0.dll.
Ajoutez les instructions using (pour C#) ou Imports (pour Visual Basic) suivantes au début du fichier de code dans lequel vous voulez utiliser les méthodes GetVstoObject et HasVstoObject.
Imports Microsoft.Office.Tools.Word.Extensionsusing Microsoft.Office.Tools.Word.Extensions;
Ces modifications sont requises parce que les méthodes GetVstoObject et HasVstoObject sont implémentées comme des méthodes d'extension. Bien que vous utilisiez les méthodes GetVstoObject et HasVstoObject comme si elles avaient été définies dans des types dans les assemblys PIA (Primary Interop Assembly) d'Excel ou de Word, elles sont en fait définies dans des types dans les espaces de noms Microsoft.Office.Tools.Excel.Extensions et Microsoft.Office.Tools.Word.Extensions du runtime Visual Studio Tools pour Office. Pour plus d'informations sur les méthodes d'extension, consultez Méthodes d'extension (Guide de programmation C#) et Méthodes d'extension (Visual Basic).
Voir aussi
Tâches
Contrôles dynamiques de complément Excel, exemple
Contrôles dynamiques de complément Word, exemple
Concepts
Programmation de compléments d'application
Ajout de contrôles à des documents Office au moment de l'exécution
Vue d'ensemble des éléments hôtes et des contrôles hôtes
Vue d'ensemble des balises actives
Historique des modifications
Date |
Historique |
Raison |
|---|---|---|
|
Juillet 2008 |
Ajout d'une rubrique. |
Modifications de fonctionnalités dans le SP1. |
Remarque :