Excel instances: release and kill Please check my code below. I don't have any problems but I'm not aware how far the code will work, release and kill excel instances..

try
{   
    wBook = xCel.Workbooks.Open(excelfilepath);                
    xCel.Visible = false;
    this.xCel.DisplayAlerts = false;
    wSheet = (Excel.Worksheet)wBook.Worksheets.get_Item(1);                    
    wSheet.Copy(Type.Missing, Type.Missing);
    wSheet = (Excel.Worksheet)wBook.Sheets[1];
    wSheet.SaveAs("1.xls");
}
catch
{
}
finally
{
    if (wBook != null)
    {           
        try
        {
            wBook.Close();
        }
        catch
        {
        }
        Thread.Sleep(500);
    }

    if (excelprocid &gt; 0)
    {
        Process xcelp = Process.GetProcessById(excelprocid);    
        xcelp.Kill();
    }

    try
    {
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
        GC.WaitForPendingFinalizers();       
    }
    catch{}

    Marshal.FinalReleaseComObject(wSheet); wSheet = null;   
    Marshal.FinalReleaseComObject(wBook); wBook = null; 
}
Since Excel runs via COM, it won't be released from memory until you remove all references to it.  Your example (above) does a pretty good job, but after you say wBook.Close(), you should say wBook = null.  Likewise Excel won't gracefully close-down while your xCel object refers to an instance of Excel.
This article on CodeProject shows the recommended/industry-standard way of closing-down excel. ffwd down to Sections 13 and 14.
http://www.codeproject.com/Articles/404688/Word-Excel-ActiveX-Controls-in-ASP-NET