0

使用此处的建议,我设法将 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 也不起作用。

有人有线索吗?

4

1 回答 1

2

我花了 3 多周的时间来解决这个问题——即便如此,我仍然需要测试它是否能按预期工作。

正如您已经知道嵌入 Excel 时功能区会自动隐藏,并且您需要通过发送 OLE 命令再次“切换”它。

我假设您使用的是用 ActiveX 容器包装的 SHDocVw 库,按照知识库文章中描述的方式是文章http://support.microsoft.com/kb/304662,并且您已经设置了适当的注册表项让浏览器显示 Excel 文档(如果您缺少的只是功能区,我相信您一定已经完成了)。

我正在使用 C#,所以你可能不得不在 VBA 中搞砸一点。

MS 支持知识库中题为“WebOCHostVB.exe 在 Visual Basic .NET 中托管 WebBrowser 控件”的文章看起来很有希望,但是 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 的行为不一致。

希望这可以帮助。

于 2013-01-03T11:26:34.367 回答