2010-09-28 4 views
2

J'utilise le Interop Excel et il semble être la création d'un processus chaque fois que j'appelleComment libérer le processus Excel?

new Microsoft.Office.Interop.Excel.Application() 

Et sans fin le processus même si j'appelle

xlApp.Quit(); 

Comment puis-je obtenir les processus finir?

Répondre

3

libérons-vous toutes vos références? (Ce qui signifie que vous devez les enregistrer en premier lieu).

Par exemple, voici ce qui est dans mon Éliminez de certains excel interop():

public void Dispose() 
    { 
     if(!this.disposed) 
     { 
      if(cell != null) 
       Marshal.FinalReleaseComObject(cell); 

      if(cells != null) 
       Marshal.FinalReleaseComObject(cells); 

      if(worksheet != null) 
       Marshal.FinalReleaseComObject(worksheet); 

      if(worksheets != null) 
       Marshal.FinalReleaseComObject(worksheets); 

      if (workbook != null) 
      { 
       workbook.Close(false, Type.Missing, Type.Missing); 
       Marshal.FinalReleaseComObject(workbook); 
      } 

      Marshal.FinalReleaseComObject(workbooks); 
      xlApp.Quit(); 
      Marshal.FinalReleaseComObject(xlApp); 

      GC.Collect(); 
      GC.WaitForPendingFinalizers(); 

      disposed = true; 
     } 
    } 

(! Je ne sais pas si cela est parfait, mais il a fonctionné pour moi)

+0

Mes objets ont été scopés localement, donc je mets ça dans un enfin, mais ça marche, merci! –

+0

Contente d'être utile –

1

Excel ne se fermera pas si vous ne libérez pas les objets COM utilisés.

This Answer should provide more information.

+0

Ouais, c'est là que je suis ma solution de, principalement. Bien que je trouvais que faire juste ce que la réponse choisie ne suffisait pas, j'ai dû mettre les appels Close(), Quit() et GC là aussi. Difficile de se débarrasser de ces fichus tableurs Excel! –

0

La plupart du temps cela se produit parce que vous avez modifié le document et Excel attend une sauvegarde. Essayez quelque chose comme:

ObjWorkBook.Close(Microsoft.Office.Interop.Excel.XlSaveAction.xlDoNotSaveChanges, 
    Type.Missing, Type.Missing); 

avant de quitter

Questions connexes