使用Microsoft.Office.Interop.Excel时,Excel 2007保持打开状态

时间:2014-06-05 06:52:49

标签: c# excel excel-2007 excel-interop

我知道这已被讨论过很多,但我找不到可以解决我特定问题的解决方案。

我已编写代码,使用.csv将数据从.xlsb文件复制到Microsoft.Office.Interop.Excel文件。我的问题是,当我使用安装了Excel 2007的计算机时,Excel进程仍保持打开状态。

我已经使用Excel 2003和2010测试了相同的代码,一切正常。

针对类似问题的大多数解决方案都会讨论留下的引用,因此我删除了大部分代码,直到我留下这个:

class Program
{
    static void Main(string[] args)
    {
        Excel.Application oApp = null;
        Excel.Workbooks oWBs = null;
        Excel.Workbook oWB = null;

        try
        {
            //Start Excel and get Application object.
            oApp = new Excel.Application();

            // Open existing workbook
            oWBs = oApp.Workbooks;
            oWB = oWBs.Open(xlsbFile);

            // Save the workbook
            oWB.Save();
        }
        catch (Exception theException)
        {
            String errorMessage;
            errorMessage = "Error: ";
            errorMessage = String.Concat(errorMessage, theException.Message);
            errorMessage = String.Concat(errorMessage, " Line: ");
            errorMessage = String.Concat(errorMessage, theException.Source);

            MessageBox.Show(errorMessage, "Error");
        }
        finally
        {
            oWB.Close(false);
            while (Marshal.FinalReleaseComObject(oWB) > 0) { };
            GC.Collect();
            GC.WaitForPendingFinalizers();
            oWB = null;

            oWBs.Close();
            while (Marshal.FinalReleaseComObject(oWBs) > 0) { };
            GC.Collect();
            GC.WaitForPendingFinalizers();
            oWBs = null;

            oApp.Quit();
            while (Marshal.FinalReleaseComObject(oApp) > 0) { };
            GC.Collect();
            GC.WaitForPendingFinalizers();
            oApp = null;
        }
    }
}

非常感谢任何有关此问题的帮助。

0 个答案:

没有答案