C# 以编程方式关闭Excel中的工作簿

C# 以编程方式关闭Excel中的工作簿,c#,excel-2007,C#,Excel 2007,假设我打开了一个名为“DataSheet.xls”的Excel文件。如何使用c#删除Excel文件?没有这样的代码。但一般来说,在过去我会使用几个api调用来实现这一点。首先,获取窗口句柄(hWnd),然后使用带有wm_close参数的sendmessage api调用 这就是我所能记得的——我已经有10年没有做过类似的事情了,所以从那时起,这个领域可能已经发生了变化:)进程类可以让你杀死一个进程。您可以检查所有正在运行的excel.exe进程,获取进程的主窗口句柄,检查该窗口的标题是否包含XL

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

没有这样的代码。但一般来说,在过去我会使用几个api调用来实现这一点。首先,获取窗口句柄(hWnd),然后使用带有wm_close参数的sendmessage api调用


这就是我所能记得的——我已经有10年没有做过类似的事情了,所以从那时起,这个领域可能已经发生了变化:)

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


否则,您可以使用Office COM类与Excel对话。这还允许您关闭打开的工作簿。

很可能一个进程将包含多个打开的工作簿。尤其是因为Excel在从资源管理器、Outlook等打开文件时更喜欢重复使用现有实例,而不是为每个工作簿创建新流程

更不用说终止进程需要1)关闭主窗口,如果有未保存的更改,主窗口将提示;2)强制终止进程,这可能会导致Excel在下次启动时显示其崩溃恢复选项


最好的做法是使用Excel COM API关闭工作簿。您可以使用该方法获取正在运行的Excel实例,然后参考Office developer参考,了解有关如何在不提示的情况下关闭特定命名工作簿的详细信息。

是否要关闭Excel应用程序Excel.exe,或者只关闭工作簿数据表.xls?我只想关闭工作簿数据表。xls非常感谢您的帮助。非常感谢您的帮助。是否有任何原因导致FormClose或FormClosing中无法使用此功能?不应该。。你确定有人打电话来吗?非常感谢你的帮助。非常感谢你的帮助。
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);