Testeur 
Inscrit: 21/08/2005 20:10
Post(s): 5
|
Piloter un Application Office en C# Il est possible depuis votre application ASP.net de piloter un logiciel Office (Excel, Access...)(ce qui n'est pas possible, à mon avis, avec le PHP). Pour cela, il faut que le serveur soit équipé de l'application que vous voulez piloter. Cet exemple est plus utile pour des application Intranet, car en extranet, le serveur n'est pas forcément équipé de Office. Cela m'a parut très compliqué au début, car il y a de nombreuses opérations a effectuer. S’il s’agissait d’une application Windows, il n’y aurait aucune configuration ou presque. Malheureusement, en ASP.Net, sur un serveur IIS, il y a quelques petits paramètres de Sécurité pour pouvoir exécuter les composants Excel. De plus, il vous faudra télécharger des composants en plus. Toutes ces opérations ont été effectuées sur Windows XP Pro, avec Visual Studio.net 2002 et Office 2003.
1. Installer Office PIA
Il vous faut d’abord télécharger les "Primary Interop Assemblies" (PIA) pour pouvoir développer des applications .NET pour Office. Téléchargez les ici : Office XP PIA.
Ensuite Dé-zippez le tout dans un dossier. Lancez le batch nommé "register" qui va inscrire toutes ces Assembly dans le GAC. Gardez les fichiers dans un coin, ils vous serviront à faire un ajout deréférence ensuite dans VS.Net. 2. Configurer la sécurité
Le Serveur IIS ne vous laissera pas exécuter les composants Office sans que vous ne changiez les paramètres sécurité COM. Voilà la démarche à suivre :
1. Faites Démarer, Exécuter et entrez la commande « dcomcnfg.exe »
2. La fenêtre « Services de composants » va s’afficher.
3. Déroulez "Services de composants", "Ordinateurs","Poste de travail", et "Configuration DCOM". Faites oui à tous les messages qui apparaissent. La liste des applications de votre machine apparait. 4. Cherchez "Application Microsoft Excel" et faites un clic droit, proriétés.
4. Dans la fenêtre qui apparaît, cliquez sur l’onglet « Sécurité »
5. Dans "Autorisations d'exécution et d'activation", cochez "Personnaliser" et cliquez sur "Modifier".
6. Ajoutez le compte ASPNET à la liste, et cochez dans ce compte les options "Execution totale","Execution a distance","Activation locale" et "Activation a distance". – cliquez ok, vous revenez a la fenêtre Sécurité.
5. Dans "Autorisations d'accès", cochez "Personnaliser" et cliquez sur "Modifier".
6. Ajoutez le compte ASPNET à la liste, et cochez dans ce compte les options "Accès local" et "Accès distant". – cliquez ok, vous revenez a la fenêtre Sécurité.
8. Validez tout
Voilà, la sécurité est configurée. 3. Commencez à développer
Le composant d’automation OLE de Excel (de même que tous ceux de la suite Office) n’offre aucune interface visuelle. Ce composant permet donc, sans jamais avoir à faire apparaître Excel à l’écran ainsi que dans la barre des tâches, de le piloter à partir d’un autre programme.
Pour l’utiliser, dotNET doit installer ce qui est appelé un RCW (Run Time Callable Wrapper) qui est une couche logicielle faisait la liaison entre le COM et dotNET. Pour générer ce Wrapper, vous pouvez utiliser :
l’utilitaire en ligne de commande TLBIMP (Type LiBrary IMPorter). VisualStudio en allant dans Projet > Ajouter une référence > Onglet COM.
Sélectionnez le composant COM de Excel (nommé : « Microsoft Excel 10.0 Object Library » pour Office 2003 et XP) et confirmez son utilisation. D’ailleurs, vous remarquerez certainement la liste impressionnante de composants COM, installés quasiment à votre insu sur votre machine).
Si vous êtes curieux, allez donc jeter un coup d’œil dans le répertoire de votre projet, vous constaterez que deux DLL se sont installées (Interop.VBIDE.dll et Interop.Excel.dll). N’oubliez pas de distribuer ces 2 DLLs si vous distribuez l’application.
Vous êtes désormais paré à appeler les propriétés et les méthodes que Excel vous fournit, pour utiliser et modifier sans aucun souci, des documents Excel.
Pour piloter Excel, il faut respecter son modèle d’objet (qui est propre à chaque application comme nous le verrons plus tard). Dans le cas de Excel, il faut commencer par créer un objet Application de l’espace de noms Excel, le classeur et la feuille. L’intellisense de VisualStudio va d’ailleurs nous être d’une grande utilité. Puis il faut créer l’objet document.
Excel._Application xlApp;
Excel._Workbook xlClasseur;
Excel._Worksheet xlFeuill1;
xlApp = new Excel.Application();
xlApp.Visible = false;
D’ailleurs, comme je vous le signalerai à deux nombreuses reprises, il serait prudent et vivement recommander de placer l’instanciation de Excel.Application dans un bloc try/catch car il se peut que Excel ne soit pas installé sur la machine de l’utilisateur.
L’objet d’application étant créé, il faut alors créer le document en ouvrant un fichier .xls ou encore en commençant un nouveau document :
object Missing = System.Reflection.Missing.Value;
object fileName = @"C:\MonFichierExcel.xls";
xlClasseur = xlApp.Workbooks.Open(fileName.ToString(),
Missing, Missing, Missing, Missing,
Missing, Missing, Missing, Missing,
Missing, Missing, Missing, Missing,
Missing, Missing);
Open accepte, par ailleurs, 15 arguments dont aucun n’a d’intérêt lors de la création d’un nouveau document ! Il faut alors simuler les arguments optionnels du Visual Basic en utilisant System.Reflection. Pensez tout de même au bloc try/catch une nouvelle fois … on ne sait jamais !
C’est bien d’avoir notre classeur, mais il serait plus utile avec des feuilles à l’intérieur. Accédons donc à l’ensemble des feuilles du classeur, puis à notre feuille :
Excel.Sheets xlFeuilles = xlClasseur.Sheets;
xlFeuill1 = (Excel._Worksheet)xlFeuilles["Feuil1"];
Vous remarquerez qu’on accède à une feuille par son étiquette, ici Vous remarquerez qu’on accède à une feuille par son étiquette, ici Feuille1.
Une fois que nous avons accès à notre feuille, accédons aux cellules et modifions les valeurs :
xlFeuill1.get_Range("J37","J37").FormulaLocal = "blabla";
xlFeuill1.get_Range("J38","J39").FormulaLocal = "blabla";
Voilà, vous savez désormais accéder de manière simple aux cellules d’Excel ! Pour le reste des opérations, je vous laisse une nouvelle fois parcourir le COM pour en découvrir toutes les richesses !
Il reste un point important à mentionner avant de conclure ce document. Faites y bien attention car toute omission peut être à l’origine de plantage.
xlClasseur.Save();//Enegistrement des modifications
xlClasseur.Close(false, Missing, Missing) ; // ferme le XLS
xlApp.Quit();
Vous pouvez aussi faire un SaveAs, si besoin...
Si il y a un problème dans ce tutorial, laissez un commentaires, j'y répondrai.
Contribution le : 05/06/2006 14:51
|