我正在用C#编写一个应用程序,它打开一个用于读/写操作的Excel模板文件 . 我想当用户关闭应用程序时,excel应用程序进程已关闭,而不保存excel文件 . 多次运行应用程序后,请参阅我的任务管理器 .
我使用此代码打开excel文件:
public Excel.Application excelApp = new Excel.Application();
public Excel.Workbook excelBook;
excelBook = excelApp.Workbooks.Add(@"C:/pape.xltx");
对于数据访问,我使用以下代码:
Excel.Worksheet excelSheet = (Worksheet)(excelBook.Worksheets[1]);
excelSheet.DisplayRightToLeft = true;
Range rng;
rng = excelSheet.get_Range("C2");
rng.Value2 = txtName.Text;
我在stackoverflow中看到类似的问题,如this question和this,以及测试答案,但它不起作用 .
15 回答
想一想,它会杀死这个过程:
另外,你试过正常关闭吗?
试试这个:
关闭工作簿时,您有三个可选参数:
Workbook.Close(false)
或者如果你正在进行后期绑定,有时候更容易使用零Workbook.Close(0)
这就是我在自动关闭工作簿时的表现 .我也去找了它的文档,在这里找到了:Excel Workbook Close
谢谢,
尝试这个..它对我有用...你应该释放xl应用程序对象来停止进程 .
参考:https://stackoverflow.com/a/17367570/132599
这解决了我的问题 . 您的代码变为:
然后释放所有这些对象:
我将它包装在一个
try {} finally {}
中,以确保即使出现问题(可能出错的地方,一切都会被释放),例如杀死Excel并不总是那么容易;看到这篇文章:50 Ways to Kill Excel
本文从微软(MS Knowlege Base Article)上获得了关于如何让Excel好好退出的最佳建议,但是如果有必要,还可以通过终止进程来确保它 . 我喜欢第二个降落伞 .
确保关闭所有打开的工作簿,退出应用程序并释放xlApp对象 . 最后检查过程是否仍然存在,如果是,那么杀死它 .
本文还确保我们不会终止所有Excel进程,但只会杀死已启动的确切进程 .
另见Get Process from Window Handle
这是我使用的代码:(每次都有效)
excelBook.Close(); excelApp.Quit();添加代码的结尾,就足够了 . 它正在处理我的代码
我遇到了同样的问题并尝试了很多方法来解决它,但是没有用 . 最后,我找到了我的方式 . 一些参考enter link description here
希望我的代码可以帮助未来的人 . 我花了两天多的时间来解决它 . 以下是我的代码:
您可以使用自己的
COM
object excel pid杀死进程在dll导入代码下面添加一些地方
并使用
它关闭了名为“Excel”的最后10秒进程
关闭所有excel进程的正确方法
基于另一种解决方案 . 我用过这个:
使用“MainWindowHandle”来识别进程并关闭他 .
excelObj:这是我的Application Interop excel objecto
为每个Excel对象使用变量,并且必须循环
Marshal.ReleaseComObject >0
. 没有循环,Excel进程仍然保持活动状态 .我们可以使用以下代码关闭Excel应用程序,同时将xls转换为xlsx . 当我们执行这种任务然后Excel应用程序在任务管理器中运行时,我们应该关闭在后台运行的这个excel . Interop是一个Com组件,用于释放我们使用Marshal.FinalReleaseComObject的com组件 .
大多数方法都有效,但excel过程始终保持到关闭应用程序 .
当杀死excel进程一旦它不能再次在同一个线程中执行 - 不知道为什么 .
这个GetWindowThreadProcessId找到正确的进程ID o excell ....杀了它....享受它!