在我的程序中,我想打开一个Excel文件并给予Excel焦点。
我使用process.Start()来执行此操作,它仅在第一次打开Excel时起作用,它启动Excel并使其聚焦。
但如果我没有收集第一个Excel或者这已经是我的系统中打开的Excel,并返回我的程序,打开另一个Excel,这次,新打开的Excel将不会被带到前台并且没有焦点。
我尝试使用Windows API获取窗口并设置焦点,但是在打开第二个Excel时它引发了异常:
process.MainWindowHandle = 'process.MainWindowHandle' threw an exception of type 'System.InvalidOperationException'
任何人都可以帮我吗?提前谢谢。
答案 0 :(得分:1)
在尝试访问MainWindowHandle
之前,您最有可能需要致电WaitForInputIdle
。这将等到Excel已经充分启动以分配主窗口句柄。
现在发生的另一件事是Excel可能会耗尽一个进程。因此,当您第二次执行Process.Start()
时,实际发生的是第二个进程将请求交给第一个进程,然后立即关闭。您可以使用任务管理器来测试此假设。如果我是对的,那么使用Process.GetProcesses()
获取所有正在运行的进程的列表,找到Excel进程,并为其主窗口提供焦点。
答案 1 :(得分:0)
不要直接炮制到Excel,只需将excel文件指定为文件名,并确保将其设置为使用ShellExecute。这将以与在资源管理器中双击相同的方式加载它。它还具有与其他excel观众合作的优势。