当前位置:  开发笔记 > 后端 > 正文

通过.NET关闭时Excel 2007挂起

如何解决《通过.NET关闭时Excel2007挂起》经验,为你挑选了1个好方法。

我有一个Visual Basic .NET程序,需要打开和关闭Excel电子表格.打开和阅读电子表格工作正常,但尝试关闭Excel 2007应用程序会导致它挂起.它似乎关闭,但如果你查看任务管理器,应用程序仍在运行.我用来关闭它的代码是

wbkData.Close(saveChanges:=False)
appExcel.Quit()
wbkData = Nothing
appExcel = Nothing

如何让Excel正常关闭?



1> 小智..:

我想在这里讨论了你的问题的答案: 如何正确清理c中的excel互操作对象

我无法从你的代码示例中看到,但基本上,总是将你的excel对象分配给局部变量,永远不要'两个点',如下所示:

//FAIL

Workbook wkBook = xlApp.Workbooks.Open(@"C:\mybook.xls");

而是单独ref每个obj:

//WIN

Worksheets sheets = xlApp.Worksheets;
Worksheet sheet = sheets.Open(@"C:\mybook.xls");
...
Marshal.ReleaseComObject(sheets);
Marshal.ReleaseComObject(sheet);

.NET为您不可见的COM对象创建一个包装器,直到GC编织其魔法才会释放.

直到我发现这个,我每次创建一个新工作簿时都会在ASP.NET应用程序中运行下面的hacky代码,该工作簿检查excel.exe进程的年龄并杀死任何超过一分钟的时间:

//force kill any excel processes over one minute old.
try
{
    Process[] procs = Process.GetProcessesByName("EXCEL");
    foreach (Process p in procs)
    {
        if (p.StartTime.AddMinutes(1) < DateTime.Now)
        {
            p.Kill(); 
        }  
    }  
}
catch (Exception)
{}  

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有