关闭文档时,加载Excel进程并关闭整个进程

本文关键字:进程 加载 文档 Excel | 更新日期: 2023-09-27 18:07:15

在我的c#应用程序中,我可以通过点击一个按钮来打开一个新的Excel进程。然后,它等待输入空闲并加载一个新的Excel文件。我必须完成它,因为我希望在加载我的文档之前加载所有的宏和工具(否则,会有渲染错误)。

进程Id保存在一个变量中,当我再次点击该按钮时,如果该进程已经存在,则该进程具有焦点,否则,将创建一个新进程:

Process processExcel = null;
if (pId_m.HasValue)
{
    try
    {
        processExcel = Process.GetProcessById(pId_m.Value);
    }
    catch (Exception ex)
    {
        Log.MonitoringLogger.Error("Unable to find Pid : " + pId_m,ex);
    }
}
if (processExcel != null && (processExcel.HasExited == false))
{
    AutomationElement element = AutomationElement.FromHandle(processExcel.MainWindowHandle);
    if (element != null)
    {
        element.SetFocus();
    }
}
else
{
    ProcessStartInfo info = new ProcessStartInfo();
    info.FileName = "Excel.exe";
    info.Arguments = " /e ";
    processExcel_l = Process.Start(info);
    pId_m = processExcel_l.Id;
    processExcel_l.WaitForInputIdle();
    processExcel_l.StartInfo = new ProcessStartInfo(path);
    processExcel_l.Start(); 
}

问题是这样的:当我关闭Excel文档窗口(而不是Excel窗口)时,我点击按钮,焦点被设置为Excel过程,但没有任何文档…这个行为是合乎逻辑的,但不是为我想要的工作…

我见过一个软件,加载一个新的进程和一个新的文档在里面,但是当点击文档关闭按钮,整个过程退出…如何复制相同的?

Edit: Ok,

最后,我没有在进程上设置焦点,而是在该进程上启动了一个文件(如果文件已经打开,则该文件将设置焦点)。

这不是我真正想做的,但它解决了我的问题…

关闭文档时,加载Excel进程并关闭整个进程

我建议使用Excel COM模型,而不是手动运行该过程。您可以订阅工作表的事件并关闭应用程序。

这些MSDN文档可能会有所帮助:

http://msdn.microsoft.com/en-us/library/wss56bz7 (v = vs.80) . aspx

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.worksheet_members.aspx

等待Excel进程结束,然后关闭应用程序:

processExcel_l.WaitForExit();
Application.Exit();

要处理仅关闭Excel文档(不是Excel过程),您可能需要引用Excel API。