.Net アプリから複数の Excel インスタンスを制御する良い例を持っている人はいますか?
質問
当社では、SQL 2000/5 と対話してかなり複雑な保険数理計算を処理する Excel 2002/XP ベースのアプリケーションを使用しています。アプリケーションはその機能を適切に実行しますが、管理が困難です。
私たちは、Excel のさまざまなインスタンス (開始/停止/処理コマンドなど) を管理および監視できる「コントローラー」アプリケーションまたはサービスを作成しようとしていますが、残念ながら、これはちょっとした InterOp の悪夢です。
誰か良いものを持っていますか(つまり、working) VB.Net または C# でこのようなことを行う例は?
解決
やめてください!
私たちはそのようなものを動作させるために何週間も試しましたが、宣伝どおりに動作しませんでした。始めてもダメ、すぐに諦めてください!
実際に使用できる唯一のオプションは、サーバー側の MOSS ベースの重い実装、つまり Excel (Web) サービス (彼らはそれをそのように呼んでいます) です。Windows ベースの COM Excel 相互運用性はほぼ廃止され、MOSS に置き換えられる予定です。
もう 1 つのオプションは、SpreadsheetGear を使用することです。それは実際に素晴らしい製品です
- 軽く速いです
- エンジンは UI から分離されているため、サーバー側で Excel の処理を行うことができます (Office がインストールされていない場合)。
- かなり安い
- 既存の Excel COM API に似た API を備えているため、コードの移動が比較的簡単です
それはすべて、スプレッドシートに必要な数式によって異なります。Spreadsheet Gear の公式リストを見て、一致するものがあればそれを選択してください。
他のヒント
Interop は正常に機能しますが、解放されない Excel オブジェクトへの参照が常に残るため、Excel インスタンスが閉じられなくなります。次の KB 記事でその理由が説明されています。
http://support.microsoft.com/default.aspx/kb/317109/EN-US/
限られた相互運用シナリオ向けに非常に慎重にコードを記述している場合は、この問題を回避できます。しかし、一般的な場合、それを確実に動作させることは非常に困難です。
この製品を検討してみてはいかがでしょうか: http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx
すべてマネージド コードと直接 .NET ライブラリです。相互運用の問題はありません。私自身は利用したことがありませんが、金融業界の人々から非常に良いことを聞いています。
Excel 2003 の単一インスタンスを制御するサービスを作成しました。Excel インスタンスを正常に閉じることができなかったので、サービスに最初にアクセスしたときに 1 つのインスタンスを開始し、そのインスタンスのみを使用して、クライアント要求をシリアル化します。