1

Microsoft.Office.Interop.Excel を使用して、C# で Excel レポートを作成しています。これらのレポートには大量のグラフィックが含まれており、準備に時間がかかります。準備中、私のプログラムが使用する Excel アプリケーションのインスタンスはユーザーから隠されています。

私の問題は、Microsoft Office がアプリケーション インスタンスを自動的に共有する傾向があることです。ユーザーが Excel ブックを開くと、Excel は実行中の Excel のインスタンスを見つけて、そこからドキュメントを開こうとします。プログラムの実行中にユーザーが Excel ワークブックを開こうとすると、プログラムが使用するインスタンスにアタッチされます。

これにより、2 つの問題が発生します。まず、レポートが表示される前に、レポートが強制的に表示されます。そして第二に、私のプログラムは今、Excel インスタンスの注意をめぐってユーザーと戦う必要があります - そして私のプログラムは通常負けます。

では、Excel インスタンスがドキュメントを開く要求を拒否するようにする方法はありますか? (ユーザーからの、まだ私のプログラムに従うべきです)。

4

3 に答える 3

1

Application.WorkbookOpenイベントを処理できます。ここで、Excel の 2 番目のインスタンスを起動してブックを開くか、エラー メッセージを表示してブックを閉じます。

Application.Interactiveプロパティも見ました。私はこれで遊んだことはありませんが、役に立つかもしれません。

于 2011-08-30T00:33:44.260 に答える
1

NPOI を使用できます。次のリンクにアクセスすることをお勧めします。

http://npoi.codeplex.com/discussions/36157?ProjectName=npoi

于 2011-08-30T00:36:17.513 に答える
0

私は少し実験をしました、そして私はこれがうまくいくと思います:

Excelでの作業を開始するときはいつでも、2つのインスタンスを作成、2番目のインスタンスで作業します。作業が終了したら、2番目のインスタンスとそのオブジェクトを削除してから、最初のインスタンスの「UserControl」プロパティを確認します。「true」が返された場合は、オブジェクトのみを削除しますが、そのインスタンスのプロセスは残します。「false」が返された場合は、インスタンスも削除してください。

私の知る限り、ユーザーは任意の数のブックを開いたり閉じたりすることができ、削除しない限り、作成した最初のインスタンスが使用され、2番目のインスタンスは修正されません。

于 2013-03-14T19:57:42.747 に答える