我在VB.NET环境中编写的应用程序出现问题,必须打开Excel文件才能获取一些数据,然后关闭它。问题在于,无论我做什么,在Windows'任务管理器应用程序总是那里。
申请表的作用:
EA = New Excel.Application
OptionsSource = EA.Workbooks.Open(Filename:=myFileName, ReadOnly:=True)
wks = OptionsSource.Worksheets(1)
' reads data from cells and stores it in an array
wks = Nothing
OptionsSource.Close()
OptionsSource = Nothing
EA.Quit()
EA = Nothing
我尝试了什么:
GC.Collect() ' after the .Close(), but really I tried it everywhere
Marshal.ReleaseComObject(Obj) ' after each Object
我见过的事情:
Application.Exit() ' seems like I cannot use it somehow
我能做什么(但我还没弄明白怎么做):
Process.Kill ' I'd have to find exactly the process that is started by EA = New Excel.Application and then kill it
我不能肯定做的是杀死所有被称为" EXCEL" (不过我知道怎么做)。
如何一劳永逸地核对Excel.Application
?
答案 0 :(得分:1)
这是一种谨慎(可能过于谨慎)的方法,总是对我有用。我引用每个COM对象,以便稍后释放它们。我在访问COM对象时避免使用多个Custom Claims
,而不是从.
获取xlSheet,我每次只进行一级,所以我需要变量xlApp.Workbooks.Open(Filename:= FileName, ReadOnly:= true).Sheets(1)
,{{1 },xlApp
和xlBooks
。有些人会说这是不必要的,但这并不会让我感到烦恼,因为我已经成功使用这种方法。
无论如何,它与你的表现方式类似。但你可能想要至少尝试xlBook
,如果没有其他的话。
xlSheet
答案 1 :(得分:0)
通过Hwnd
杀死该进程。不是很漂亮,但似乎有效: