以编程方式在Excel中关闭工作簿

时间:2010-06-16 07:17:17

标签: c# excel-2007

假设我打开了一个名为“DataSheet.xls”的Excel文件。如何使用c#?

删除该Excel文件

4 个答案:

答案 0 :(得分:5)

using Excel = Microsoft.Office.Interop.Excel;
(...)
var app = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
// I have english excel, but another culture and need to use english culture to use excel calls...
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
app.Workbooks["DataSheet"].Close(false, false, false);

答案 1 :(得分:2)

单个进程很可能包含多个打开的工作簿。特别是因为Excel在从Explorer,Outlook等打开文件时更喜欢重用现有实例,而不是为每个工作簿创建新进程。

更不用说杀死进程将要求你1)关闭主窗口,这将提示是否有未保存的更改或2)强行终止进程,这可能会导致Excel在下次启动时显示其崩溃恢复选项它

最佳操作方法是使用Excel COM API关闭工作簿。您可以使用Marshal.GetActiveObject方法获取正在运行的Excel实例,然后参考Office开发人员参考,以获取有关如何在不提示的情况下关闭特定命名工作簿的详细信息。

答案 2 :(得分:1)

Process类允许您终止进程。您可以检查所有正在运行的excel.exe进程,获取进程的主窗口句柄,检查该窗口的标题是否包含XLS文件的名称,然后终止该窗口的进程。

否则,您可以使用Office COM类与Excel通信。这也可能允许您关闭打开的工作簿。

答案 3 :(得分:0)

副手没有这样的代码。但一般来说,过去我会用几个api来做这件事。首先,你得到窗口句柄(hWnd),然后你将使用带有wm_close参数的sendmessage api调用。

这就是我能记住的一切 - 因为我必须做那种事情已经大约10年了,所以从那时起该领域可能已经改变了:)