Excel + service windows

Résolu
cs_Boukra Messages postés 7 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 septembre 2007 - 25 sept. 2007 à 10:33
cs_Boukra Messages postés 7 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 septembre 2007 - 27 sept. 2007 à 08:56
Bonjour,


Je dois programmer un service windows (qui tourne sur un serveur 2003) qui va actualiser les données d'un tableau croisé dynamique d'un fichier Excel (qui se trouve sur un autre serveur)...

Premier problème, lorque je teste mon service en mode Debug pas de problème tout fonctionne parfaitement mais lorsque j'installe mon service et que je le démarre il bloque sur le fonction RefreshAll().

Deuxième problème, à la fin de ma fonction il reste dans les processus en cours un Excel.exe et pas moyen de l'arreter.
 
Pour l'instant je teste le service windows sur ma machine (Win Xp) et le programme est développé en C# avec VS2005



public



void
updateFileXLS(

string
path)
{
   writeLog(

"updateFileXLS"
,

"Start"
);


   try
   
{


         object
Missing = System.Reflection.

Missing
.Value;


         string
fileName = path;
         Microsoft.Office.Interop.Excel.

_Application
xlApp;
         Microsoft.Office.Interop.Excel.

_Workbook
xlClasseur;
         
         xlApp =

new
Microsoft.Office.Interop.Excel.

Application
();
         xlApp.Visible = false

;


         xlClasseur = xlApp.Workbooks.Open(fileName, Missing, Missing, Missing, Missing,
                                                                             Missing, Missing, Missing, Missing, Missing,
                                                                             Missing, Missing, Missing, Missing, Missing);
         // *****    bloque ici   ********
         xlClasseur.RefreshAll();

// Actualise toutes les plages de données externes et rapports PivotTable du classeur. 

         xlClasseur.Save(); 





         xlClasseur.Close(

false
, Missing, Missing); 





         xlApp.Quit(); 





         
         writeLog(

"updateFileXLS"
,

"Stop"
);
   }


   catch
(

Exception
ex)
   {
         writeLog(ex.TargetSite+

":"
+ ex.Message,

""
+ ex.InnerException);
   }
}



Si quelqu'un pouvait m'aider ou me donner des idées de pistes parce que là je vois pas pourquoi cela ne fonctionne pas...

Merci.

2 réponses

cs_rodcobalt22 Messages postés 193 Date d'inscription dimanche 10 février 2002 Statut Membre Dernière intervention 16 février 2016
25 sept. 2007 à 13:36
Utilises tu l'automation Excel ? (composant com) si oui, le problème de la persistance de l'executable est connu et on peut rien y faire, enfin presque !
Il est possible de scrutter les process nommés "EXCEL" avant le lancement de ton composant COM et ensuite reparcourir les process "EXCEL" à la recherche du nouveau. tu mémorise sont processID et tu Kill celui à la fin des traitements.
Je sais, c'est pas terrible mais c'est la méthode que j'utilise et qui fonctionne très bien de mon coté.

Pour le bloquage de ton refresh ALL, je pense que tu devrait executer ton appli en release et voir si le problème persiste. Peut être manque t-il des éléments sur le serveur ou des fichiers en relation avec ton tableau croisé

RodCobalt22, vous salue bien
Pensez au TAG résolu ! Ainsi les réponses seront plus facile à trouver et les serial Helper iront plus vite
 PS : Pardonnez mes fautes d'orthographe (All
3
cs_Boukra Messages postés 7 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 septembre 2007
27 sept. 2007 à 08:56
Pour le process Excel j'ai fait comme tu l'a dis... et cela marche!


Pour le blocage j'ai trouvé... j'avais oublié de donner les droits à mon service windows pour exécuter Excel...

Merci...
3
Rejoignez-nous