WebBrowser中的嵌入式Excel(c#) - 以优雅的方式避免单独的窗口?

时间:2018-03-19 19:13:52

标签: c# excel wpf webbrowser-control

我正在使用WebBrowser控件(即来自System.Window.Controls)在我的C#WPF应用程序中托管Excel。

令人讨厌的是,它将在新窗口中打开,除非我手动将BrowserFlags键从值0x00000008更改为0x80000A00以获取许多HKLM键(下面是我创建的.reg文件,以便快速完成此操作)。通过此注册表更改,Excel应用程序将按预期在c#应用程序WebBrowser控件内打开。

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.OpenDocumentSpreadsheet.12]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.12]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.8]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetBinaryMacroEnabled.12]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetMacroEnabled.12]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Template.8]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.TemplateMacroEnabled]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Workspace]
"BrowserFlags"=dword:80000A00

请注意,这些注册表更改在最新的Excel中没有记录(曾经有一篇MSDN注册表文章为早期的Excel执行此操作,但是对于较新的Excel版本没有正式的说法,但它有效)。

现在烦人的是,Excel不断更新会将注册表恢复为默认值。因此,运行良好的应用程序需要能够在每次启动时适当地设置注册表值(并在关闭时将值重新设置为先前的设置)。

但是,这意味着更改需要UAC提示的HKLM,或者授予应用程序管理员权限(两者都是不受欢迎的)。

有谁知道更好的方法来实现这一目标?我猜的路径是查看WebBrowser的AxIWebBrowser2属性,并对Excel的嵌入方式进行更低级别的配置,但这超出了我的知识范围。有任何想法吗?注意我不想使用ActiveX商业控件方法,因为WebBrowser似乎非常稳定,并且是微软推荐的嵌入Excel的方式(因此应该更加面向未来)。

0 个答案:

没有答案