C# 如何在特定excel文件已打开时自动关闭该文件(而不关闭excel)?
是否可以在excel文件已打开时关闭它?我编写了一段代码,可以确定某个特定excel文件是否已打开,但一旦确定该文件已打开,我就无法关闭该文件。我尝试了以下方法(见下文)关闭工作簿和excel应用程序:C# 如何在特定excel文件已打开时自动关闭该文件(而不关闭excel)?,c#,excel,C#,Excel,是否可以在excel文件已打开时关闭它?我编写了一段代码,可以确定某个特定excel文件是否已打开,但一旦确定该文件已打开,我就无法关闭该文件。我尝试了以下方法(见下文)关闭工作簿和excel应用程序: //我的工作簿名为“工作簿”,而Excel应用程序名为“Excel”。 工作簿。关闭(true); excel.Quit() 执行后一个代码不会关闭已打开的Excel窗口。了解我用于确定文件是否打开的代码也可能会有所帮助(如下所示): 同样,我无法创建一个“杀死Excel”的程序。如果已经打开
//我的工作簿名为“工作簿”,而Excel应用程序名为“Excel”。
工作簿。关闭(true);
excel.Quit()代码>
执行后一个代码不会关闭已打开的Excel窗口。了解我用于确定文件是否打开的代码也可能会有所帮助(如下所示):
同样,我无法创建一个“杀死Excel”的程序。如果已经打开的Excel窗口的路径与我尝试读取和写入的路径相同,我只需要知道如何关闭该窗口。请查看以下示例代码:-
using Excel = Microsoft.Office.Interop.Excel;
Excel.Application exl = new Excel.Application();
# open a file
Excel.Workbook wbook = exl.Workbooks.Open("some_file.xlsx");
# To close the file
wbook.Close();
exl.Quit();
编辑1:-
如果上述解决方案不适用于您,您可以参考以下链接:-
您可以使用Windows API,根据某个窗口的标题关闭该窗口
这将调用窗口关闭,因此它将提示用户是否确实要关闭:
using System.Runtime.InteropServices;
...
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
const UInt32 WM_CLOSE = 0x0010;
然后
IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "MyFile.xlsx - Excel");
if (windowPtr == IntPtr.Zero)
{
MessageBox.Show("Document not open");
return;
}
SendMessage(windowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
如果需要强制关闭,即使文件已被修改,也只能终止相关的excel进程。但请记住,如果其他excel窗口运行在同一个excel流程实例中,这也将强制杀死它们
using System.Diagnostics;
...
Process[] processes = Process.GetProcesses();
foreach (Process p in processes)
{
if (p.MainWindowTitle == "MyFile.xlsx - Excel")
{
p.Kill();
break;
}
}
你已经试过这个了吗?.close()命令不关闭已打开的文件;这就是我在这个主题上找到的所有解决方案(包括您刚才推荐的解决方案)中主要关注的内容。可能重复的内容并不相同,因为我无法“杀死Excel”,这是您链接的主要解决方案所推荐的。另外,使用.close()或.quit()不会从屏幕中删除已打开的Excel文件。使用.close()和.quit()命令不会关闭已打开的Excel文件。我想关闭已经打开的文件。有没有办法关闭Excel窗口而不提示用户,也不关闭Excel。谢谢你的帮助。
using System.Diagnostics;
...
Process[] processes = Process.GetProcesses();
foreach (Process p in processes)
{
if (p.MainWindowTitle == "MyFile.xlsx - Excel")
{
p.Kill();
break;
}
}