如何通过C#打开Excel并给出Excel焦点

本文关键字:Excel 焦点 打开 何通过 | 更新日期: 2023-09-27 18:26:03

在我的程序中,我想打开一个Excel文件并给出Excel焦点。

我使用过程。Start()要做到这一点,它只在第一次打开Excel时工作,它会启动Excel并给予它焦点。

但如果我没有关闭第一个Excel,或者这已经是在我的系统中打开的Excel,然后回到我的程序,打开另一个Excel,这一次,新打开的Excel不会出现在前台,也没有焦点。

我试图使用Windows API来获取窗口并设置焦点,但当打开第二个Excel:时,它抛出了一个异常

process.MainWindowHandle = 'process.MainWindowHandle' threw an exception of type 'System.InvalidOperationException'

有人能帮我吗?提前谢谢。

如何通过C#打开Excel并给出Excel焦点

很可能您只需要在尝试访问MainWindowHandle之前调用WaitForInputIdle。这将等待Excel充分启动,以便分配主窗口句柄。

我现在想到的另一件事是,Excel可能会耗尽一个进程。因此,当您第二次执行Process.Start()时,实际发生的情况是,第二个进程将请求传递给第一个进程,然后立即关闭。您可以使用任务管理器来检验这个假设。如果我是对的,那么使用Process.GetProcesses()获取所有正在运行的进程的列表,找到Excel进程,并将焦点放在其主窗口上。

与其直接炮击Excel,只需指定Excel文件作为文件名,并确保其设置为使用ShellExecute即可。这将以与在资源管理器中双击相同的方式加载它。它还具有与其他优秀观众合作的优势。