如何在Excel浏览器中嵌入Excel功能区时显示它

时间:2012-11-10 22:44:13

标签: wpf excel browser

使用here中的建议,我设法将Excel 2007嵌入到我的WPF WebBrowser控件中。但是,功能区不会显示。我尝试了各种技术,没有任何东西可以使用。

我试过了:

 _application.ExecuteExcel4Macro("SHOW.TOOLBAR(\"Ribbon\",True)");

我还尝试在构建Excel工作簿后从宏运行它,

Sub hide_ribbon()
    Application.ExecuteExcel4Macro ("Show.Toolbar(""Ribbon"", False)")
End Sub
Sub show_ribbon()
    Application.ExecuteExcel4Macro ("Show.Toolbar(""Ribbon"", True)")
End Sub

但它也不起作用,虽然相同的宏在本机Excel中工作正常。

还试过这个:

    CommandBar cb = _workbook.CommandBars["Standard"];
    cb.Visible = true;
    cb.Enabled = true;
    cb.Position = MsoBarPosition.msoBarTop;

或者尝试将“标准”更改为“功能区”,但没有任何效果。

Ctrl + F1也不起作用。

有人知道吗?

1 个答案:

答案 0 :(得分:2)

我用了3个多星期的时间来完成这项工作 - 即便如此,我仍然需要测试它是否按预期工作。

正如您所知,在嵌入Excel时会自动隐藏功能区,并且您需要切换'它通过发送OLE命令再次返回。

我假设您使用ActiveX容器包装的SHDocVw库,以知识库文章中描述的方式是文章http://support.microsoft.com/kb/304662,并且您已设置相应的注册表项以使浏览器访问显示Excel文档(我确信如果您缺少的是功能区,则必须完成。)

我正在使用C#,所以你可能不得不在VBA中乱七八糟。

文章名为" WebOCHostVB.exe在Visual Basic .NET中托管WebBrowser控件"在MS支持知识库看来很有希望,但URL是" support.microsoft.com/kb/311303"

打开文档后,按如下方式在浏览器上调用ExecWB:

     object omissing = System.Reflection.Missing.Value ;
     this.axExcelWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS,
                                    SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
                                    ref omissing, ref omissing);

这应该切换功能区状态 - 因为它在我们启动时关闭,单个调用应该使其显示。再次这样做应该隐藏它 - 虽然我没有尝试过。

常量位于必须从项目中引用的shdocvw.dll中。即使这些是整数枚举,我也无法在本地重新定义它们并使事情发挥作用。

您可以在此处找到可能对您的应用程序有用的其他OLE命令: http://msdn.microsoft.com/en-us/library/ms691264%28v=VS.85%29.aspx

我不知道为什么会这么困难,或者为什么Excel的行为与Word的行为不一致。

希望这有帮助。