代码之家  ›  专栏  ›  技术社区  ›  Rabin

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

  •  2
  • Rabin  · 技术社区  · 15 年前

    假设我打开了一个名为“datasheet.xls”的Excel文件。如何使用c_杀死该Excel文件?

    4 回复  |  直到 15 年前
        1
  •  5
  •   simendsjo    15 年前
    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);
    
        2
  •  2
  •   Josh    15 年前

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

    更不用说取消进程将要求您1)关闭主窗口,该窗口将提示是否有未保存的更改;2)强制取消进程,这可能导致Excel在下次启动时显示其崩溃恢复选项。

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

        3
  •  1
  •   Thorsten Dittmar    15 年前

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

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

        4
  •  0
  •   jim tollan    15 年前

    手头上没有这样的代码。但一般来说,在过去,我会使用几个API调用来实现这一点。首先,您将得到窗口句柄(hwnd),然后将sendmessage api调用与wm_Close参数一起使用。

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

    推荐文章