插入图像时如何保持Excel互操作性

我正在使用Excel COM互操作插入图像(特别是EPS)到电子表格中。 图像插入正常,但Excel忽略所有的可见/背景设置,窃取焦点显示一个对话框,如“导入图像”。 对话框只能保留一小段,但会使屏幕闪烁,更糟糕的是,当我一次插入多个图像时,它可以垄断系统几秒钟(包括从前台进程中窃取按键)。

我设置后台选项如下:

Excel.Application xlApp = new Excel.Application(); xlApp.Visible = false; xlApp.ScreenUpdating = false; xlApp.DisplayAlerts = false; Excel.Worksheet worksheet; //.... worksheet.Pictures(Type.Missing).Insert(filename,Type.Missing); //steals focus 

我怎样才能让Excel保持在这里的背景?

我怀疑这是由Microsoft许可的行为不良的组件造成的。

处理这种情况的唯一方法是通过拦截相应的低级别Windows消息并使用Win32钩子来阻止它

最简单的方法是,使用CBT钩子,相信我,这不是很好。 CBT代表“基于计算机的培训”。 这是一个古老的,几乎过时的技术,旨在使创build培训应用程序,看你在做什么,并做出相应的反应。 唯一有用的是钩住和防止您无法访问的代码中的窗口激活。 您可以拦截HCBT_ACTIVATE代码并阻止激活一个窗口。

这可能需要在C或C ++中完成。

与常识相反,设置xlApp.ScreenUpdating = true; 防止焦点偷盗! ( 来源 )

我不知道我对你的问题有一个很好的答案(我会留下一个评论,但显然我没有足够的声望),但如果有帮助,我也经常禁用事件

 xlApp.EnableEvents = False 

当你在代码中依赖Excel事件时,显然你必须对这个设置很敏感,但是为了防止在插入时发生一些不需要的事件,这可能会有所帮助。

祝你好运!