Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Process EXCEL non supprimé du gestionnaire des taches

1 réponse
Avatar
michael
Bonjour =E0 tous,
Dans une appli web ecrite en csharp, j'=E9cris dans un fichier excel
puis je l'affiche sur le poste client. le probl=E8me est qu'il ne me
supprime pas la tache EXCEL.EXE dans le gestionnaire de taches, il
prend donc de plus en plus de m=E9moire et fait planter le serveur...
Je suis sous win2000 et office2003.
voici mon code, merci de votre aide.

private void ExcelDetail(DataSet ds)
{
// cr=E9ation du fichier Excel de d=E9tail
string fileName =3D this.Server.MapPath(".") +
"\Fichier\ModelEfficienceModDetail.xls";

// Objet pour les arguments optionnels ou manquants
object missing =3D System.Reflection.Missing.Value;

// Ouverture de Excel
Excel.ApplicationClass excelApp =3D new excel.ApplicationClass();
excelApp.Visible =3D true;
Excel.Workbooks excelWorkbooks =3D excelApp.Workbooks;
Excel.Workbook excelWorkbook =3D
(Excel.Workbook)excelWorkbooks._Open(fileName, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing,
missing, missing);
Excel.Worksheet excelWorksheet =3D
(Excel.Worksheet)excelWorkbook.Worksheets.get_Item(1);

.=2E..... divers calcul pour renseigner les celulles du fichier
excel.........

//Quitter Excel et nettoyer les Objets
if(excelWorksheet !=3D null)
System.Runtime.InteropServices.Marshal.ReleaseComObject
(excelWorksheet);
excelWorksheet =3D null;
if(excelWorkbook !=3D null)
System.Runtime.InteropServices.Marshal.ReleaseComObject
(excelWorkbook);
excelWorkbook =3D null;
if(excelWorkbooks !=3D null)
System.Runtime.InteropServices.Marshal.ReleaseComObject
(excelWorkbooks);
excelWorkbooks =3D null;
if(excelApp !=3D null)
{
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject (excelApp);
excelApp =3D null;
}
// Ouverture du fichier EXCEL
Response.Write("<body><script>window.open('\\Fichier/Courant/" + file +
"')</script></body>");=09
}

1 réponse

Avatar
mboizeau
D'une manière générale il n'est pas recommandé de faire tourner les
applications Office sur un serveur web. En particulier parcequ'Excel
est concu pour une utilisation humaine et risque donc de rester
bloquer dans une utilisation "composant".

Ceci mis a part, un appel du garbage collector liberera le process
Excel, utilisez la syntaxe :
System.GC.Collect(0);
apres le "quit()"

(testé en winform, mais il n'y a pas de raison pour une utilisation
serveur)

OTH !

Marc Boizeau

http://oraclevsmicrosoft.blogspot.com