0

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 も機能しません。

誰か手がかりを得ましたか?

4

1 に答える 1

2

これを解決するのに3週間以上かかりました。それでも、すべてが期待どおりに機能することをテストする必要があります。

すでにご存知のとおり、Excelを埋め込むとリボンは自動的に非表示になり、OLEコマンドを送信してリボンを再びオンに切り替える必要があります。

ナレッジベースの記事http://support.microsoft.com/kb/304662に記載されている方法で、ActiveXコンテナでラップされたSHDocVwライブラリを使用しており、適切なレジストリエントリを設定していることを前提としています。ブラウザにExcelドキュメントを表示させるため(リボンだけが足りない場合は、必ず実行しておく必要があります)。

私はC#を使用しているので、VBAを少し混乱させる必要があるかもしれません。

MSサポートナレッジベースの「WebOCHostVB.exeがVisualBasic.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);

これにより、リボンの状態が切り替わります。開始時にオフになっているため、1回の呼び出しでリボンが表示されます。これをもう一度行うと、それを隠す必要があります-私は試していませんが。

定数はshdocvw.dllにあり、プロジェクトから参照する必要があります。これらは整数の列挙ですが、ローカルで再定義して機能させることはできませんでした。

アプリケーションに役立つ可能性のある他のOLEコマンドは、次の場所にあります:http: //msdn.microsoft.com/en-us/library/ms691264%28v=VS.85%29.aspx

なぜこれがそれほど難しいのか、Excelの動作がWordの動作と一致しないのかはわかりません。

お役に立てれば。

于 2013-01-03T11:26:34.367 に答える