2010-06-16 2 views
1

J'utilise cette invocation pour libérer certains objets Excel après que j'ai terminé. Est-il nécessaire de définir des références à null après (comme dans le code suivant)?Marshal.ReleaseComObject (...) questions

var dateCol = sheet1.get_Range("C4", "C" + rowOffset); 
dateCol.NumberFormat = "Text"; 
Marshal.ReleaseComObject(dateCol); 
dateCol = null; 
+2

Excel Interop est un peu de la magie noire , A mon humble avis. Le null ne fait pas mal. – Nate

Répondre

1

C'est ce que je l'utilise toujours et il fonctionne très bien

using Excel = Microsoft.Office.Interop.Excel; 

    Excel.ApplicationClass _Excel; 
    Excel.Workbook WB; 
    Excel.Worksheet WS; 

try 
    { 

    _Excel = new Microsoft.Office.Interop.Excel.ApplicationClass(); 
    WB = _Excel.Workbooks.Open("FILENAME", 
     Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
     Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
     Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
     Type.Missing, Type.Missing); 

     //do something 

    } 
    catch (Exception ex) 
    { 
     WB.Close(false, Type.Missing, Type.Missing); 

     throw; 
    } 
    finally 
    { 
     GC.Collect(); 
     GC.WaitForPendingFinalizers(); 

     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(WB); 

     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(_Excel); 


    } 

Faites un

System.Runtime.InteropServices.Marshal.FinalReleaseComObject 

Sur tous Excel référencé objets

+0

Merci! Je serai sûr de l'utiliser. Il semble que parfois Excel va se bloquer malgré mon code ci-dessus ... donc il semble que c'est la voie à suivre. –