Process EXCEL non supprimé du gestionnaire des taches
Le
michael
Bonjour à tous,
Dans une appli web ecrite en csharp, j'écris dans un fichier excel
puis je l'affiche sur le poste client. le problème 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émoire et fait planter le serveur
Je suis sous win2000 et office2003.
voici mon code, merci de votre aide.
private void ExcelDetail(DataSet ds)
{
// création du fichier Excel de détail
string fileName = this.Server.MapPath(".") +
"\Fichier\ModelEfficienceModDetail.xls";
// Objet pour les arguments optionnels ou manquants
object missing = System.Reflection.Missing.Value;
// Ouverture de Excel
Excel.ApplicationClass excelApp = new excel.ApplicationClass();
excelApp.Visible = true;
Excel.Workbooks excelWorkbooks = excelApp.Workbooks;
Excel.Workbook excelWorkbook =
(Excel.Workbook)excelWorkbooks._Open(fileName, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing,
missing, missing);
Excel.Worksheet excelWorksheet =
(Excel.Worksheet)excelWorkbook.Worksheets.get_Item(1);
. divers calcul pour renseigner les celulles du fichier
excel
//Quitter Excel et nettoyer les Objets
if(excelWorksheet != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject
(excelWorksheet);
excelWorksheet = null;
if(excelWorkbook != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject
(excelWorkbook);
excelWorkbook = null;
if(excelWorkbooks != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject
(excelWorkbooks);
excelWorkbooks = null;
if(excelApp != null)
{
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject (excelApp);
excelApp = null;
}
// Ouverture du fichier EXCEL
Response.Write("<body><script>window.open('\\Fichier/Courant/" + file +
"')</script></body>");
}
Dans une appli web ecrite en csharp, j'écris dans un fichier excel
puis je l'affiche sur le poste client. le problème 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émoire et fait planter le serveur
Je suis sous win2000 et office2003.
voici mon code, merci de votre aide.
private void ExcelDetail(DataSet ds)
{
// création du fichier Excel de détail
string fileName = this.Server.MapPath(".") +
"\Fichier\ModelEfficienceModDetail.xls";
// Objet pour les arguments optionnels ou manquants
object missing = System.Reflection.Missing.Value;
// Ouverture de Excel
Excel.ApplicationClass excelApp = new excel.ApplicationClass();
excelApp.Visible = true;
Excel.Workbooks excelWorkbooks = excelApp.Workbooks;
Excel.Workbook excelWorkbook =
(Excel.Workbook)excelWorkbooks._Open(fileName, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing,
missing, missing);
Excel.Worksheet excelWorksheet =
(Excel.Worksheet)excelWorkbook.Worksheets.get_Item(1);
. divers calcul pour renseigner les celulles du fichier
excel
//Quitter Excel et nettoyer les Objets
if(excelWorksheet != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject
(excelWorksheet);
excelWorksheet = null;
if(excelWorkbook != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject
(excelWorkbook);
excelWorkbook = null;
if(excelWorkbooks != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject
(excelWorkbooks);
excelWorkbooks = null;
if(excelApp != null)
{
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject (excelApp);
excelApp = null;
}
// Ouverture du fichier EXCEL
Response.Write("<body><script>window.open('\\Fichier/Courant/" + file +
"')</script></body>");
}

Poser une question


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