0

私が抱えている問題は、C# コードで作成されたワークブックをクライアント コンピューターに保存することです。プログラムの公開バージョンは私のマシンでは完全に動作しますが、クライアントでは動作しません。

プロセスの概要:

プログラムが反復を完了すると、ワークシートが作成され、ワー​​クブックが保存され、エクスポートが成功したことを示すメッセージ ボックスが表示され、作成されたワークブックが表示されます。

問題:

クライアント マシンで実行すると、ワークシートを作成するプロセスが実行されますが、何らかの理由でファイルが保存されません。Excelのインスタンスをメモリに保持するので、タスクマネージャーを開くとプロセスが表示されます。また、プログラムを実行してコンピューターの電源を切ろうとすると、インスタンスがまだメモリ内にあるため、作成されたワークブックを保存するかどうかを確認するメッセージが表示されます。これが私が回避した方法であり、プログラムがワークシートを作成したことを確認するためにワークブックを保存する必要がありました。

私の考え:

Excelファイルが保存されて自動的に開かれるのを妨げているWindowsまたはExcelの設定があるのではないかと考えています。ワークブック作成プロセスの進行状況を監視するタスクを実行するためにバックグラウンド ワーカーも使用しているため、これも問題になる可能性があります。

誰かがこの問題に遭遇したか、解決策を知っている場合は、私に知らせてください。さらに情報が必要な場合は、それを提供できます。

すべてが私の開発マシンでは機能しますが、クライアントでは機能しないため、問題が発生する理由を知るのに役立つとは思わなかったため、コードは含めませんでした。

編集

私は Jared と協力して、最終的に VS がインストールされた別のマシンでプログラムをデバッグすることができました。問題は保存機能にあるのではなく、クライアント マシンで作成されたデフォルト シートの数にあることがわかりました。

ワークブックを作成するとき、プログラムはワークシートを調べて、最初のものを除くすべてを削除することになっています。このステートメントで問題を引き起こしたワークブックに空のシートを残す論理上の欠陥 (私がコーディングしました:/) がありました:

int lastRow = _excelWorksheet.Cells.Find("*", Type.Missing, Type.Missing, Type.Missing, 
                XlSearchOrder.xlByRows, XlSearchDirection.xlPrevious, false, Type.Missing, Type.Missing).Row;

どうやら、空のシートで何かを検索するのは好きではありません。現在、開発マシンはデフォルトで 1 シートのみに設定されているため、問題は発生しませんでした。

私が奇妙なことに気付いたのは、デバッグ中にプログラムがその行で System.NullReferenceException をスローすることでした。ただし、クライアント マシンでプログラムがクラッシュすることはありません。代わりに、前述のように Excel インスタンスをメモリに残し、そこに留まります。Jared が言ったように、Excel はバックグラウンド スレッドで実行されるので、おそらくそれが関係しているのでしょう。

4

0 に答える 0