1

Excel COM Interop を使用してデータを Excel にエクスポートするサード パーティ アプリがあります。プログラムにバグがあり、Excel インスタンスが表示される前に失敗します。しかし、例外が発生している場所から、表示されたスタック トレースによると、必要な情報は既に Excel ワークシートに書き込まれています。

Microsoft.Office.Interop.Excel名前空間を使用して、独自のインスタンスを生成する代わりに、既存のExcel インスタンスに接続する方法はありますか? または、その孤立した Excel インスタンスを表示して、完了したものを保存できるようにする他の方法はありますか?


注として、EXCEL.exe はプログラムを閉じた後もタスク マネージャーに表示されているため、アプリが切断された後もインスタンスは引き続き有効で実行されています。


詳細: プログラムが行っているのは、独自の (独自の) データベースからレポートをエクスポートすることですが、何らかの理由でデータベース内の一部のレコードが不正な形式になりInteger Overflow、レポートの生成中にエラーが発生します。スタック トレースを見ると、レポートの最後に要約を生成しているときに、この整数オーバーフローが発生しているように見えます。

私の使用では、レポートの行項目だけの要約は必要ないので、これまでにどのような作業が行われたかを確認したかったのですが、EXCEL.exe通信していたインスタンスは表示されません。

レポートが正常に生成する別の日付範囲でレポートを実行すると、この特定の入力セットが失敗する原因となるのは、1 日の 1 つのレコードに関するものだけです。

アプリのプロバイダーとのサポート契約が期限切れになり、新しいベンダーに切り替える過程にあるため、管理者はそれを更新することに関心がありません (そのため、レポートが生成され、データソースとして使用されます)データ変換)。そのため、データを移動できるように「修正」することを任されました。


最終更新: 質問した理由が解決しました。プログラム自体を介して各レコードを調べることができ、そのフィールドの 1 つが 16274176.00 に設定されているレコードを見つけました (通常の値は 100 の範囲にあります (フロートのように見えるものがInteger Overflowエラーを引き起こす理由を尋ねないでください) ))、それを 0.00 に変更すると、レポートは正常に印刷されました。ただし、ツールボックスの便利なツールになると思うので、元の質問に対する回答があるかどうかを知りたいと思います。

4

1 に答える 1

1

元の質問に関しては、実際にはここで尋ねられた内容と重複している可能性があると思います: Get instance of Excel application with C# by Handle

このブログ投稿に対するいくつかの回答が指摘されています: Launching Office Apps Programmaticallyでは、マネージ コードから既に実行中の Office アプリケーションに接続する方法のオプションのパレットが提供されます。

ブログ投稿と回答には、これを行う方法を示すサンプル コードも含まれています。

于 2013-01-06T10:28:20.090 に答える