リモート プロシージャ コールに失敗しました。 (HRESULT からの例外:0x800706BE) リモートのエクセルファイル

リモートのエクセルファイルを開く時に、リモート プロシージャ コールに失敗しました。 (HRESULT からの例外:0x800706BE)というエラーが表示されることがあるそうです。

 

情報元はこちら。

Excel を開くときにエラー 0x800706BE

 

以下は質問の抜粋です。

 

C#Excel ブックを開く際、ブックの再計算が非常に遅い時になかなか開かず、コードではエラーが発生して強制終了という現象が発生します。プログラムからではなく、直接ブックを開く場合は時間がかかってもちゃんと開きます。COM インタフェースの実装側で、一定期間応答がない場合に強制終了するシーケンスとなっているように見えます。

コードは以下のようです。

Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();

Microsoft.Office.Interop.Excel._Workbook doc = app.Workbooks.Add(fileName);
実際は2行目の app.Workbooks.Add でエラー(HRESULT: 0x800706BE) が発生します。

この動作を何とか回避したいのですが、タイムアウトを無くすか、長くすることでうまく回避できないものか、と考えています。

 

 

まず、タイムアウトの設定ができるとか、できないとか。

 

ご回答ありがとうございました。

残念ながら、これだけだと Workbook_Open のマクロは実行され、解決にはなりませんでした。

Workbook.Add 実行後、約30秒経過すると、コンソールに以下のメッセージが表示されます。

アイドル状態と思われるアプリケーションが見つかりました
; 強制終了します
この時にキャッチした例外のメッセージ(SystemException.Message)を表示すると、以下になります。

リモート プロシージャ コールに失敗しました。 (HRESULT からの例外:0x800706BE)
Workbook_Open 時のマクロは、時間がかかるのをシミュレートするために Application.Wait を実行しています。(実物のブックはもっと大量の計算式が設定されており、待ち時間を調整できなかったのです)

この待ち時間を30秒に設定すると、現象が発生し、29秒以下だと発生しないという現象になっています。

ですから、この、アイドル状態と判定するまでの待ち時間を調整できればいいのではないかと、考えたのです。

Excel ブックの中身(計算式やマクロなど)は私の担当ではなく、なるべくチューニングしてくださいとしか言えないので、受け取ったこちらの方だけでできる何かを探しています。

 

 

結論、ファイルサイズが大きすぎるのが問題の要因の一つのようです。

 

サイズが300Mもあるのですね。これでは開くだけで時間がかかってしまいます。
本題から外れるかもしれませんが、Excelは無駄にファイルサイズが極端に大きくなります。例えば、以下のページの「4、空白の行・列を削除してみる」とサイズが極端に減る場合があります。

巨大なファイルサイズのExcelを軽くするワザ!その2
http://shikaku.wakarutodekiru.com/blog/technic/1285.html

 

 

ロジクール ワイヤレスマウス 無線 マウス M185CG 小型 電池寿命最大12ケ月 無線マウス M185 グレー 国内正規品