我正在编写一个应用程序,它使用以下代码访问 Excel 文件:
RBTApplication = new Excel.Application();
RBTWorkbooks = RBTApplication.Workbooks;
RBTWorkbook = RBTApplication.Workbooks.Open(
RBTDataSet.Instance.FilePath, 0, true, 5, "", "", true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
"\t", true, false, 0, true, 1, 0 );
RBTWorksheet = (Excel.Worksheet)RBTWorkbook.Worksheets.get_Item( 1 );
RBTRange = RBTWorksheet.UsedRange;
加载所需的数据后,我尝试使用这段代码关闭 Excel 应用程序:
RBTWorkbook.Close();
RBTApplication.Quit();
RBTWorksheet.ReleaseComObject();
RBTWorkbook.ReleaseComObject();
RBTWorkbooks.ReleaseComObject();
RBTApplication.ReleaseComObject();
我的问题是 EXCEL.EXE 进程仍在运行。
像终止所有 Excel 进程这样的简单解决方案听起来不太好,因为我的进程可能是同时使用的许多电子表格之一。这也会影响打开新的 Excel 电子表格 - 每个电子表格都会以只读方式打开,直到我不终止此进程。
那么...如何正确关闭此应用程序或终止此特定进程(有什么方法可以从 COM 对象获取 PID 吗?)。我想我已经找到了一个(没有尝试过) - 在打开新的 ExcellApp 之前和之后获取 Excell 进程列表,比较列表(获取差异),在知道其 PID 的情况下杀死特定进程。但这个解决方案似乎不是在我的应用程序中处理 COM 对象和其他应用程序的正确方法。