1

Microsoft.Office.Interop.ExcelC# で を使用してカスタム ファイルを作成していました.xlsx

そうすることで、私はWorkbookオブジェクトを作成しました。データを取得して処理し、Interop を介してカスタム スタイルとフォーマットを適用するための複雑な SQL クエリの性質上、コードは非常に長くなります。相互運用機能自体からのメモリ リークを回避し、実行後に Excel が実際に適切に閉じられるようにするための非常に慎重なプロセスは言うまでもありません。

私は当初、コンソール アプリケーションとしてテストしていましたが、満足のいく動作が得られました。それが行うことは、SaveAsメンバーを使用して最終結果をファイルシステムに保存することです。

ただし、次の目標は、出力を出力ストリームとして、asp.netこの質問のようなものにリダイレクトすることでした。私はいくつかの基本的な調査を行いましたが、最初にワークブックをサーバーのファイル システムに保存することを含まないアプローチを見つけることができないようです。これにより、複数のユーザーが同時にアクセスしている場合などに競合が発生する可能性があります。

私の質問は、オブジェクトをファイル システムに保存せずに asp.netContentTypeを設定し.xlsxてストリーミングする簡単な方法はありますか? Workbookそうでない場合、asp.net一時ファイルを競合なしで自動的に保存し、一時ファイルを提供し、提供後に一時ファイルを削除する方法はありますか?

4

1 に答える 1

1

Excel Interop サーバー側の使用を避けるべきであるというコメントに同意します。また、私が使用したサードパーティ ライブラリ (EPPlus、Aspose) はすべて、出力のストリーミングをサポートしています。ただし、一時ファイルを競合せずに保存したい場合は、Path.GetTempFileNameを使用できます。

ASP.NET アプリがプロファイルのないアカウントで実行されている場合は、書き込みアクセス権%WINDIR%\Tempまたはアプリが使用する一時ディレクトリを付与する必要がある場合があります。

于 2012-06-14T15:04:35.107 に答える