【发布时间】:2013-04-11 11:37:01
【问题描述】:
我的代码如下
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(file);
Excel.Worksheet xlSheet = xlWorkbook.Sheets[1]; // get first sheet
Excel.Range xlRange = xlSheet.UsedRange;
这些是我的函数中使用的唯一变量
foreach (Excel.Worksheet XLws in xlWorkbook.Worksheets)
{
// do some stuff
xlApp.UserControl = false;
if (xlRange != null)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlRange);
if (xlSheet != null)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlSheet);
if (xlWorkbook != null)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkbook);
xlRange = null;
xlSheet = null;
xlWorkbook = null;
xlApp.Quit();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp);
}
但我仍然在任务管理器中得到 EXCEL.EXE
请帮忙?
【问题讨论】:
-
通常情况下,退出命令会将进程从任务管理器中取出。您确定 Excel.exe 不是在代码测试期间卡在那里的先前进程吗?如果代码不好,你不得不中途停止它,excel应用程序将永远不会退出。
-
我注意到您正在退出应用程序
for each工作表???听起来很奇怪,只有一个应用程序包含工作表。 -
@Daniel 是的,因为以前我在循环之外尝试过..现在可以说如果它正在读取文件 ABC.xlsx,它会在同一文件夹中创建 ~ABC.xlsx有必要退出它(我不知道任何其他方式)......而且因为它正在循环它试图读取〜ABC.xlsx并生成异常
-
你在做一些 foreach ".xlsx" 文件吗???如果不是那个~ABC文件没有问题,退出应用程序时它会被删除。我相信在一些调试中你遇到了一个错误,并且在那个运行中,excel 应用程序卡在了管理器中。您运行的任何其他时间都会创建一个新的excel进程,如果它到达quit命令,它将退出管理器。但是以前的过程永远不会在那里完成,必须手动将其关闭。
-
Excel 互操作是一堆垃圾...我最终改用 OpenOfficeXML / EPPlus!
标签: c# excel automation