关闭程序而不关闭excel的单独实例

时间:2016-05-16 13:49:21

标签: c# excel

我正在编写一个与Excel密切合作的程序。执行我的Exit命令时,我似乎遇到了麻烦。它不仅会关闭它创建的所有excel实例(这是任何事情悬挂的重点),但它也会关闭任何手动打开的excel实例。

有人能够指出我出错的地方吗?

(另外,我正在学习C#,所以请原谅任何“常见”错误。欢迎所有建设性批评。)

        private void BtnExit_Click_1(object sender, EventArgs e)
    {
        try
        {
            if (ObjApp == null)
            {
                Excel.Application ObjApp = new Excel.Application();
            }

            Modules.MessageUpdate(this, ObjApp, EH, 5, 22, "", "", "", 0, 0, 0, 0, "Application Quit.", "N");

            ObjApp.Quit();

            if (ObjApp != null)
            {
                ObjApp = null;
            }
            if (UC != null)
            {
                UC = null;
            }
            if (Zoho != null)
            {
                Zoho = null;
            }
            if (Modules != null)
            {
                Modules = null;
            }
            if (EH != null)
            {
                EH = null;
            }
            if (proc != null)
            {
                proc = null;
            }
            if (Wait != null)
            {
                Wait.Close();
                Wait = null;
            }
            GC.Collect();
            GC.WaitForPendingFinalizers();

            Environment.Exit(0);
        }
        catch(COMException)
        {
            //System.Windows.Forms.Application.Restart();
            if (ObjApp != null)
            {
                ObjApp = null;
            }
            if (UC != null)
            {
                UC = null;
            }
            if (Zoho != null)
            {
                Zoho = null;
            }
            if (Modules != null)
            {
                Modules = null;
            }
            if (EH != null)
            {
                EH = null;
            }
            if (proc != null)
            {
                proc = null;
            }
            if (Wait != null)
            {
                Wait.Close();
                Wait = null;
            }
            //ObjApp.Quit();
            GC.Collect();
            GC.WaitForPendingFinalizers();
            Environment.Exit(0);
        }
        catch
        {
            if (ObjApp != null)
            {
                ObjApp = null;
            }
            if (UC != null)
            {
                UC = null;
            }
            if (Zoho != null)
            {
                Zoho = null;
            }
            if (Modules != null)
            {
                Modules = null;
            }
            if (EH != null)
            {
                EH = null;
            }
            if (proc != null)
            {
                proc = null;
            }
            if (Wait != null)
            {
                Wait.Close();
                Wait = null;
            }
            GC.Collect();
            GC.WaitForPendingFinalizers();
            Environment.Exit(0);

        }
    }

1 个答案:

答案 0 :(得分:1)

保留您的应用程序创建的工作簿列表,然后让您的"退出"关闭那些工作簿。如果最后一个工作簿关闭,Excel有剩余的工作簿,则关闭Excel,否则保持打开状态,手动工作簿仍然可用。