Visual Studio 2005 Tools for Microsoft Office: L'automation Office en .NETDate de publication : 28/09/2005 , Date de mise a jour : 28/09/2005
Par
LEBRUN Thomas (Autres Articles)
Les VSTO 2 (Visual Studio 2005 Tools For Office) représentent la nouvelle génération d'outils de développement d'applications Microsoft Office. I. Présentation des VSTO 2 I-A. Présentation I-B. Comment ça marche ? II. Possibilités des VSTO 2 III. L'ActionsPane IV. Les autres objets particuliers IV-A. Word IV-A-1. Bookmark IV-B. Excel IV-B-1. NamedRanged IV-B-2. ListObject V. Les SmartTags VI. Un peu plus loin... VI-A. Excel VI-A-1. Cache des données VI-B. Outlook VI-B-1. Création d'une barre de menu VI-B-2. Création d'un nouveau mail VI-B-3. Récupération des contacts Outlook VI-B-4. Création d'un rendez-vous dans le Calendrier Outlook VI-B-5. Création d'une tâche VI-C. PowerPoint VI-C-1. Changement du fond VI-C-2. Ajouter un slide VI-C-3. Accéder aux éléments d'un slide VI-C-4. Ajouter un élément à un slide VI-C-5. Ajouter une animation à votre slide VI-C-6. Ajouter un commentaire VI-C-7. Chargement d'une présentation VI-C-8. Libération des ressources VII. Et le futur ? VIII. Conclusions IX. Liens X. Téléchargements I. Présentation des VSTO 2I-A. Présentation
Les VSTO 2 (acronyme de Visual Studio 2005 Tools For Office) vous permettent de réaliser rapidement des applications Microsoft Office complexes. En effet, cette nouvelle version, tout comme la précédente, vous permet d'utiliser toute la puissance de .NET pour la réalisation de vos applications. Cette version des VSTO apporte beaucoup de nouvelles fonctionnalités, dont les plus intéressantes sont sans doutes:
Cette intégration dans Visual Studio vous permet d'utiliser toutes les possibilités de l'IDE (assistants, etc...) pour la réalisation de vos applications. De plus, de part l'utilisation du glisser-déposer, vous avez une rapidité de développement accrue par rapport au développement VBA (Visual Basic for Application). Pour bien comprendre cette intégration, je vous propose de voir cela en images. Voici une images des VSTO 1: Maintenant, voici un aperçu des VSTO 2: Non non, vous ne rêvez pas : dans la version 2, votre application Microsoft Office est complètement intégrée dans Visual Studio: vous pouvez alors tout aussi bien glisser/déposer des composants, qu'utiliser les menus d'Office. Voila qui simplifie bien la vie n'est-ce pas ;) I-B. Comment ça marche ?
Les applications Microsoft Office sont des serveurs COM. Par conséquent, l'intéraction entre une application Microsoft Office et du code .NET se nomme "Interop COM". Lorsque vous développez, vous écrivez votre code managé (votre code .NET) dans une "Interop Assembly" (IA), qui est l'équivalent managé .NET de la librairie COM. Avec Microsoft Office 97 et Microsoft Office 2000, ces IAs sont auto-générées avec l'outil TlbImp: cet outil, livré avec le Framework .NET, sert à lire une librairie COM et à générer l'IA correspondante permettant son utilisation par du code .NET. De son coté, Microsoft Office XP inclut, quant à lui, des IAs prégénérées (et optimisées) que vous devez utiliser plutôt que les IAs auto-générées par TlbImp. Une IA distribuée par le propriétaire original d'un serveur COM est appellée "Primary Interop Assembly" (PIA) et Microsoft met à disposition des développeurs les PIAs d' Microsoft Office XP et d' Microsoft Office 2003 (consultez ce lien si vous désirez plus d'informations sur les PIAs et les IAs).
Lorsque vous déployez une application qui utilises les PIAs d'Office XP, vous pouvez les déployer dans le même répertoire que votre application Microsoft Office. Mais une meilleur approche est d'installer ces PIAs dans la GAC de la machine cible. Pour le déploiement d'applications Microsoft Office 2003, les PIAs ne doivent pas être déployées en même temps que l'application: Microsoft recommande que seul l'installation d'Office doit être le seul mécanisme pour installer ces PIAs (lors de l'installation d'Office, vous devez être sur d'avoir coché "Support de la programmation .NET", uniquement possible si vous avez installez le Framework .NET 1.1/2.0 et que vous êtes en mode "Installation Personnalisée" et non pas "Installation Typique"). II. Possibilités des VSTO 2
Cette nouvelle version des VSTO vous permet une intéraction complète avec Word, Excel ou Outlook. En effet, vous avez la possibilité de:
Voici d'ailleurs un exemple de code vous montrant comment ajouter un graphique à une feuille Excel:
Ce qui donne ceci dans notre application
Bien sûr, il vous est toujours possible de rajouter, directement depuis la feuille Excel, un ligne à votre tableau Excel, ce qui aura pour résultat de rajouter une colonne à votre graphique. Comme vous l'aurez compris, le tableau représente la source de données de votre graphique, c'est pourquoi ajouter une ligne à ce tableau ajoute une ligne à votre graphique. Si vous désirez ajouter une barre de menu personnalisée, rien de plus simple:
Notez que vous avez la possibilité de changer l'apparence de votre bouton (dans la barre d'outils) au moyen de la propriété Style, qui prend ses valeurs dans l'énumération Office.MsoButtonStyle: Voici un aperçu de ce que donne le code d'ajout d'une barre de menu personnalisée: Comme vous le voyez, cela s'avère relativement simple: il vous suffit juste d'un peu de pratique. Bien sur, les VSTO 2 vous permettent également pas mal d'autres choses. En effet, vous avez la possibilité d'intéragir complètement avec l'ActionsPane (le panneau d'actions des documents Microsoft Office): nous verrons cela dans le chapitre suivant. Sachez qu'il vous est aussi possible, grâce à cette technologie, d'utiliser des Datasets, des Web Services, etc. au sein de votre application. Pour faire simple, retenez une chose sur les possibilités des VSTO: Toutes les possibilités offertes par le Framework .NET peuventêtre utilisées pour le développement de votre application ! III. L'ActionsPane
Comme dit un peu plus haut, l'ActionsPane est le panneau d'actions des documents Microsoft Office, disponible depuis Microsoft Office 2003. Si vous ne voyez pas de quoi je veux parler, ouvrez Word ou Excel et appuyez sur Control + F1: sur la droite de votre document apparaît un volet. Avec les VSTO 2, vous avez la possibilité de modifier, de manipuler complètement ce volet pour pouvoir l'utiliser dans votre application (on peut par exemple imaginer une application utilisant des Web Services pour afficher dans ce volet, le prix de produits, etc.) Avec les VSTO 2, vous devez savoir que tout est objet ! Par conséquent, même cet ActionsPane est un objet. Et qui dit objet dit propriétés, méthodes, etc. Voyons cela en exemple:
Comme vous pouvez le voir, il est très simple d'ajouter un contrôle à notre panneau d'actions. Voyons un peu plus d'explications ce bout de code:
Bien sur, pour notre exemple, l'ActionsPane est utilisé de façon très simple. Mais sachez que vous avez la possibilité de vous connecter à un Web Service, d'utiliser des Dataset, des UserControls, etc. Bref, cet ActionsPane est entièrement personnalisable !
IV. Les autres objets particuliers
L'ActionsPane n'est pas le seul objet intéressant qu'il vous est possible d'utiliser dans vos développements. En effet, Word et Excel possèdent leur propres objets "particuliers" que nous allons voir tout de suite.
IV-A. WordIV-A-1. Bookmark
L'objet Bookmark, disponible dans Word, vous permet la gestion des signets. Un bookmark est un signet, un marqueur de position, qui vous permet de retrouver ou d'insérer du texte, des tableaux, des objets OLE, etc... à une position donnée. Il est alors possible d'ajouter, de modifier ou bien même de supprimer des bookmarks de votre document.
Voyons un petit exemple:
Ainsi, manipuler les signets de Word s'avère d'une simplicité extrême. Voyons à présent les objets disponibles dans Excel. IV-B. ExcelIV-B-1. NamedRanged
L'objet NamedRanged dans Excel pourrait être comparé à l'objet Bookmark de Word. En effet, il s'agit d'une collection nommée de cellules au sein de votre feuille Excel. Il est alors possible de modifier la taille du texte, la police utilisée, etc. des cellules contenues dans ce NamedRanged. Voyons cela un peu mieux:
IV-B-2. ListObject
Le ListObject est l'objet que vous devez utiliser si vous devez afficher des données de façon structurée. En effet, cet objet vous permet d'afficher, sous forme de tableau, un ensemble de données. Vous avez la possibilité, très pratique, de trier les données: cette fonctionnalité étant implémentée automatiquement par votre objet, vous n'avez rien à faire. Le tableau généré est en lecture/écriture: par conséquent, dans le cas où la source de données de votre objet ListObject est une base de données, il est possible de faire des modifications sur celle-ci directement depuis votre ListObject. Pour faire un tableau en lecture seule, vous avez 2 possibilités:
Pour définir la source de données de votre ListObject, il vous suffit de définir sa propriété DataSource, soit en passant par le Designer, soit avec une ligne de code:
Ainsi, l'utilisation (et la manipulation) de cet objet se révèle efficace, simple et surtout extrêment rapide. V. Les SmartTags
Les SmartTags permettent la reconnaissance de texte dans votre document Microsoft Office. Vous avez la possibilité d'exécuter une ou plusieurs actions (c'est à vous de choisir, selon vos besoins) lorsque la reconnaissance de texte est effectuée. Les SmartTags existent dans Microsoft Office depuis Microsoft Office XP et ont été améliorés dans Microsoft Office 2003 ( source).Voici une image vous montrant comment voir qu'un texte a été reconnu: Et voici ce qui se passe lorsque l'on clique sur le SmartTag: Voici un exemple de code vous montrant comment implémenter les SmartTags dans votre application VSTO:
Ainsi, il vous suffit de définir un SmartTag, une action associée à ce SmartTag et la méthode à exécuter pour que le tout soit opérationnel rapidement et efficacement. Sachez que les SmartTags supportent les espaces et la ponctuation: pour cela, il vous faut utiliser les expressions régulières pour parser la chaîne à analyser. VI. Un peu plus loin...
Cette partie abordera quelques points plus poussés à propos des VSTO. Elle sera principalement composée d'exemples que je n'ai, malgré mes recherches intensives, pas pu trouvé sur Internet. C'est pourquoi je vous en fait profiter. VI-A. ExcelVI-A-1. Cache des données
Une autre fonctionnalité intéressante des VSTO concerne le Cache des données. En effet, il est possible de mettre, dans un Dataset, des données en cache pour pouvoir les réutiliser ultérieurement. Ainsi, on peut imaginer un scénario dans lequel votre application se connecte, au démarrage, à une base de données. A la fermeture, elle enregistre les données dans la base et dans un Dataset de cache. Si, lors de la réouverture de l'application, la connexion au serveur SQL n'est pas possible (coupure réseau, etc...), vous pouvez tout à fait recharger les données depuis votre Dataset. Ainsi, l'utilisateur peut continuer à travailler sans interruption.
Pour mettre en place ce système de cache, c'est très simple: vous devez utiliser un Dataset, le déclarer comme public et le faire précéder de l'attribut Microsoft.VisualStudio.Tools.Applications.Runtime.Cached. Voici ce que cela donne par le code:
A la fermeture de votre application, stockez vos données dans le Dataset CachedDs. Ensuite, dans le Form_Load, testez si CachedDs est différent de null et travaillez avec.
Ainsi, l'application d'un système de cache, dans les applications VSTO se révèle très simple à mettre en place mais peut présenter un risque dans l'éventualité où les données présentes dans la base on pu être modifiées depuis le dernier lancement de l'application. A utiliser avec précaution donc, ou alors si vous êtes sûr de ce que vous faîtes ;) VI-B. Outlook
Même si je n'en ai pas beaucoup parlé dans cet article, sachez que les VSTO vous permettent de manipuler Word, Excel mais également Outlook. Je vais donc vous montrer quelques unes des possibilités qui sont à votre disposition, dans le cas où vous auriez la nécessité de travailler avec Outlook et les VSTO. VI-B-1. Création d'une barre de menu
Comme Word et Excel, vous avez la possibilité d'ajouter une barre d'outils directement dans Outlook. Pour cela, rien de plus simple: la méthode est quasi-identique que les autres fois.
La différence avec les autres créations de barre de menu se situe sur la ligne:
Ici, on utilise ActiveExplorer() pour récupérer l'objet Explorer courant. Un Explorer est l'objet représentant la fenêtre dans laquelle le contenu d'un répertoire est affiché. Ainsi, la ligne de code ci-dessus sert à ajouter une barre de menu qui sera, par défaut, placée au milieu de la fenêtre de visualisation des emails. Pour que cela soit plus clair, voici une capture d'écran: Comme on peut le voir, ActiveExplorer() nous a permis de récupérer un handle sur la fenêtre droite d'Outlook et d'y insérer notre menu. Maintenant que nous avons vu cette partie, voyons comment il nous est possible de créer, directement par programmation, un nouveau mail, d'y ajouter un pièce jointe, etc.... VI-B-2. Création d'un nouveau mail
Pour créer un nouveau mail, rien de plus simple: il vous suffit d'instancier un nouvel objet de type MailItem. Pour cela, appeller la méthode CreateItem de l'objet Application (qui représente votre application Outlook). Cette méthode prend en paramètre une des valeurs de l'énumération Microsoft.Office.Interop.Outlook.OlItemType, qui indique le type d'item à créer:
Ainsi, pour créer un nouveau mail, utilisez ce bout de code:
A partir de maintenant, il ne vous reste plus qu'à appeller les méthodes et à définir les propriétés de votre objet. Voici un exemple:
Ainsi, on s'aperçoit qu'envoyer un mail est un chose aisée qui peut se faire très très rapidement. Voyons alors comment récupérer la liste de vos contacts. VI-B-3. Récupération des contacts Outlook
Les VSTO vous permettent aussi bien de créer des contacts Outlook que de les récupérer, avec leurs informations (nom, prénom, etc.). Voyons cela avec un simple bout de code:
Avec ce bout de code, nous parcourons le répertoire Contact d'Outlook puis, pour chaque entrée contenue dans ce répertoire, nous affichons, dans une listview, certaines de ces informations. La liste complète des propriétés de l'objet ContactItem peut-être retrouvée ici.Voici un aperçu, en image, du résultat produit par ce code: Comme vous pouvez le voir, recréez un simple explorateur de contacts Outlook s'avère donc très simple à mettre en oeuvre. VI-B-4. Création d'un rendez-vous dans le Calendrier Outlook
Vous avez également la possibilité de créer, via votre application VSTO, un rendez-vous dans le calendrier Outlook de l'utilisateur exécutant votre application. Pour cela, il vous suffit de déclarer et d'instancier un nouvel objet de type Outlook.AppointmentItem, de définir quelques unes de ses propriétés (telles que le sujet, le corp, l'heure, etc.) puis d'enregistrer le rendez-vous au moyen de la méthode Save de votre objet. Voyons tout cela par le code:
Cet exemple étant suffisant parlant de lui-même, je ne prend pas la peine de vous l'expliquer en détails et je préfère vous montrer le résultat ;) VI-B-5. Création d'une tâche
Pour créer une tâche, ce n'est pas plus compliqué que pour créer un rendez-vous :)
Si vous observez ce code, vous pourrez juger par vous-même qu'il n'est guère différent du code de création d'un rendez-vous, hormis l'objet de création de tâche: Outlook.TaskItem. Sur cette dernière capture d'écran, on voit distinctement qu'il y a 2 rappels. Pensant au départ qu'il s'agissait d'un bug d'Outlook (on se sait jamais...), je me suis vite rendu compte qu'il s'agissait:
D'ailleurs, si vous observez bien la fenêtre de rappel de votre Outlook (ou de l'image située plus haut), vous pouvez voir, à gauche du sujet du rappel, l'icône de "l'application" (calendrier ou tâches) qui a provoqué le rappel. VI-C. PowerPoint
Vous avez la possibilité de développer pour PowerPoint (et même Access ou encore InfoPath), en faisant de l'automation COM (bien sûr, vous pouvez toujours utiliser VBA). Cette technique peut être utilisée par n'importe quel langage de développement pouvant manipuler des objets COM (donc, cela fonctionne très bien à partir de Visual Studio .NET). Imaginez par exemple le scénario suivant: votre employeur vous demande de réaliser une application qui, après avoir extrait des informations d'une base de données, les affiche dans une présentation PowerPoint, en faisant défiler les slides une à une. C'est dans un cas comme celui-ci que les VSTO 2 trouvent toute leur utilité. Avant toute chose, vous devez:
Et là, vous n'avez plus qu'à manipuler votre document PowerPoint. Voyons cela avec des exemples... VI-C-1. Changement du fond
Pour changer l'image de fond d'une présentation PowerPoint, voici la marche à suivre:
Sachez que vous avez la possibilité de ne changer le fond que d'un seul slide. Pour cela, récupérer la collection de slides de votre présentation, puis modifiez la propriété BackGround du slide dont vous voulez changer le fond.
Voici le résultat que vous obtenez (en fonction de l'image de fond que vous avez choisit): VI-C-2. Ajouter un slide
Pour ajouter un slide, rien de plus simple: récupérer la collection de slides de votre présentation et ajoutez en un en appellant la méthode Add, qui prend en paramètre:
Le type de slide doit être choisit dans l'énumération Microsoft.Office.Interop.PowerPoint.PpSlideLayout, dont voici certaines valeurs que vous utiliserez (à mon avis) le plus souvent:
Bien sûr, il en existe beaucoup d'autres, et je vous laisse consulter la MSDN pour avoir de plus ample détails. Voyons cela par le code:
Ainsi, vous avez réussit à ajouter, avec succès, un slide à votre présentation. Si nous avions utilisé un slide de type ppLayoutText, celui-ci aurait comporté deux zones de texte: une (en haut) pour écrire un titre, et une autre (dans le centre de la page), pour saisir du texte. La prochaine partie vous apprendra à accéder à ces éléments, et à les modifier pour vos besoins. VI-C-3. Accéder aux éléments d'un slide
Chaque slide de votre présentation possède une collection de Shapes, qui représente l'ensemble des éléments de votre diapositive. Ainsi, pour pouvoir manipuler la première zone de texte, il nous suffit d'y accéder par son index dans la collection Shapes:
Voici le résultat en image: Si vous voulez modifier l'indentation du texte, à l'intérieur de votre slide, cela vous est tout à fait possible: il vous suffit de modifier la propriété IndentLevel.
Ce qui donne ceci comme rendu: Nous savons donc ajouter un slide, modifier le contenu déjà existant d'un slide. Voyons maintenant comment ajouter des éléments à un slide. VI-C-4. Ajouter un élément à un slide
Pour ajouter un élément (TextBox, image, etc...) à un slide, la procédure ne s'avère pas très compliquée: il vous faut récupérer l'ensemble des éléments déjà présents sur le slide (au moyen de la collection Shapes). Ensuite, il ne vous reste plus qu'à jouter un élément (Shape) à cette collection. Voyons ce que cela donne:
Le code précédent est donc utilisé pour:
Pour vous rendre compte du résultat, voyez l'image suivante: Bien sur, vous pouvez ajouter autre chose qu'une simple TextBox, dans votre slide:
VI-C-5. Ajouter une animation à votre slide
Si vous voulez ajouter une animation à votre slide, vous devez utiliser un objet de type PowerPoint.Effect. Commencez par récupérer l'élément qui devra être animé, puis récupérer la présentation active de votre application et appelez la méthode AddEffect, vous permettant d'ajouter un effet/une animation.
La méthode AddEffect prend en paramètre:
Si vous lancez votre présentation (appuyez sur la touche F5 dans PowerPoint), et que vous faîtes afficher le slide sur lequel vous avez ajouter une animation, vous devriez la voir se jouer. Un autre moyen de voir que ce slide possède une animation: dans PowerPoint, cliquer sur "Affichage" puis sélectionnez "Normal" ou "Normal (Restauration des volets)". Dans le panneau qui s'ouvre devant vous, cliquez sur l'onglet "Diapositives" et repérez le slide sur lequel vous avez inséré une animation: vous devriez voir une petite étoile (signe d'une animation) sur la gauche de la miniature. VI-C-6. Ajouter un commentaire
Si vous désirez ajouter un commentaire à votre slide (utile pour donner des indications au lecteur), sachez que vous pouvez le faire simplement. Pour cela, récupérer la collection de Comments et ajouter un commentaire à cette collection. Ce qui donne, par exemple:
La méthode Add prend en paramètres:
Pour voir le résultat, c'est ici: VI-C-7. Chargement d'une présentation
Si vous voulez ouvrir directement une présentation, sachez que vous pouvez tout à faire le faire en appellant la méthode Open de la collection Presentations.
De plus, si vous voulez que la diaporama se lance automatiquement après le chargement de votre présentation, voici la ligne de code à utiliser:
Cette ligne vous permet de récupérer la présentation active, puis de lancer la présentation au moyen de la méthode Run. Sachez que vous pouvez également modifier le temps d'attente entre chaque slides, etc.. VI-C-8. Libération des ressources
Dans le cas où vous faîtes de l'automation Office avec des objets COM (c'est-à-dire des objets non managés), vous devez pensez à libérer les ressources que vous avez utilisé, et cela dès que vous n'en avez plus besoin. Voici comment appliquer cette règle:
Par ce bout de code, vous vous assurez de bien quitter l'application PowerPoint et de mettre sa référence à null. Ainsi, lorsqu'à la ligne suivante, on appellera le Garbage Collector, celui-ci saura que notre objet n'est plus utilisé et qu'il peut donc le supprimer de la mémoire. Comme je vous l'ai dit, ce processus est important si vous voulez éviter de vous retrouver avec des problèmes de mémoire excessive, etc....
VII. Et le futur ?
Selon Eric CARTER, membre de l'équipe de développement des Visual Studio Tools For Office, le développement des VSTO 3 est prévu et ciblera la plateforme Microsoft Office 12 ( Source).Leur développement a même déjà commencé: une préview des VSTO 3 a été présentée lors de la session OFF417 de la PDC (Voir ici pour plus d'informations).On peut supposer (mais ce n'est que mon avis, rien d'officiel) que cette nouvelle version des VSTO sera disponible en même temps que la future version de Visual Studio (Nom de code: Orcas). VIII. Conclusions
Nous avons donc vu que les VSTO nous permettent:
A vous maintenant d'apprendre à utiliser ces outils pour pouvoir vous rendre compte, par vous même, des multiples possibilités des VSTO ;) IX. LiensX. Téléchargements
Vous trouverez ci-joint la solution VSTO 2005 que j'ai réalisé pour écrire cet article: Solution Visual Studio 2005 Scripts SQL La solution VS 2005 et les scripts SQLUne vidéo de démonstration de l'automation PowerPoint en .NET: Vidéo.L'article au format PDF.
|
Les sources présentées sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005 LEBRUN Thomas. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.