Parcourir ce sujet:
1 Utilisateur(s) anonymes
| mes-gestions.net | Piloter un Application Office en C# |
|
|---|---|---|
|
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
|
|
|
||
| m4[virerca]@paris.com | Re: Piloter un Application Office en C# |
|
|---|---|---|
|
m4[virerca]@paris.com
|
Merci pour cette belle doc.
Mais je n'arrive pas à régler un probleme (sous Office XP) : l'utilisation d'Excel sur le serveur laisse tourner un process EXCEL.EXE même après xlApp.Quit(); La solution, tuer le process assocé avec System.Diagnostics.Process.GetProcessById (xlApp.ProcId).Kill() Mais xlApp.ProcId n'existe pas. Ma question (si vous avez le temps et la réponse) : comment optenir le process ID de l'instance Excel (2002 donc) crée ? En tout cas, re-merci.
Contribution le : 19/06/2006 16:09
|
|
|
||
| mes-gestions.net | Re: Piloter un Application Office en C# |
|
|---|---|---|
|
Testeur
![]()
Inscrit:
21/08/2005 20:10 Post(s): 5
![]() |
Salut,
désolé du temps de réponse je n'avais pas reçu la notification il faut que je coche l'option d'envoi de notification... Alors ce qui est bizarre, c'est que le processus reste ouvert. Normalement, si aucune erreur n'apparait, il se ferme tout seul. Donc ce qu'il faut que tu fasses, c'est générér ton code ligne par ligne pour voir d'où provient l'erreur. Et tu ferme a chaque fois le processeus EXCEL.exe si il ne se ferme pas... Jérôme
Contribution le : 20/06/2006 10:20
|
|
|
||
| @ngelofdeath | Re: Piloter un Application Office en C# |
|
|---|---|---|
|
@ngelofdeath
|
Salut,
Une solution pour tuer ton process est que juste avant ton worbook.open(....) tu releve l'heure courante de cette maniere. DateTime heure_de_depart = DateTime.Now; ensuite au moment de quitter l'idée est de regardé tout les processus EXCEL present de la maniere suivante: Process[] prc = System.Diagnostics.Process.GetProcessesByName("EXCEL"); puis de les parcourir et de regardé leur heure de départ pour savoir s'ils correspondent à celui que tu veux tuer.(ceci à 2 secondes près au cas ou l'application aurait été longue à démarrer! for (int i = 0; i < prc.Length; i++) { if (((Process)prc[i]).StartTime >= heure_de_depart.AddSeconds(((double)-2)) ||((Process)prc[i]).StartTime>=heure_de_depart.AddSeconds(((double)2))) { ((Process)prc[i]).Kill(); } } voila j'espère t'avoir aidé!
Contribution le : 03/07/2006 13:55
|
|
|
||
| Invité | Re: Piloter un Application Office en C# |
|
|---|---|---|
|
Invité
|
une application et NON pas un application
Contribution le : 12/07/2006 13:48
|
|
|
||
| centredinteret@free.fr | Piloter un Application Office en C# |
|
|---|---|---|
|
centredinteret@free.fr
|
Testeur,
merci pour ton tutorial. J'ai une question connexe à ta présentation : j'aimerais savoir comment, dans un projet C#, ouvrir une présenatation POWERPOINT contenant une feuille EXCEL et/ou un document WORD ? Cordialement J.
Contribution le : 19/07/2006 12:35
|
|
|
||
| Invité | Re: Piloter un Application Office en C# |
|
|---|---|---|
|
Invité
|
Salut J.,
Concernant ta question, le fichier que tu veux ouvrir est donc un fichier Powerpoint... et non pas un fichier excell... donc pour cela, il faut que tu utilise une méthode pour piloter PowerPoint (ce que je n'ai jamais fais, désolé). Mais fais des recherches, tu trouvera surement ton bonheur ! @+ Jérôme.
Contribution le : 20/07/2006 16:09
|
|
|
||
| Invité | Re: Piloter un Application Office en C# |
|
|---|---|---|
|
Invité
|
Merci pour ta réponse.
Je cherche en effet du coté de powerpoint. J.
Contribution le : 21/07/2006 10:41
|
|
|
||
Vous pouvez débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous pouvez répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous pouvez voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous pouvez poster sans approbation.












