2011-01-03 18 views
2

COM相互運用機能アセンブリを使用して、一部のデータをASP.NET WebアプリケーションのExcelブックにエクスポートしようとしています。これは、サーバーとクライアントが同じマシンであるため、開発には問題ありません。しかし、導入された場合、これは当てはまりません。展開されたバージョンは例外をスローしませんが、ローカルマシンでExcelを開きません(ASP.NETはサーバーサイドで実行されるため、これはかなり明白です)。Excelアプリケーションのクライアント側を開きます。

クライアントマシン上でExcelアプリケーションを作成するにはどうすればよいですか?

答えて

3

Excelファイルサーバー側を生成し、適切なMIMEを使用してクライアントに送信する必要がありますクライアントがそれを開く方法を理解できるようにします。 fileNameは、ファイルに付ける名前で、bytesbyte[]形式でExcelの発電機から出力され、このような

何か...

HttpContext.Current.Response.Clear(); 
HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName)); 
HttpContext.Current.Response.ContentType = "application/ms-excel"; 
HttpContext.Current.Response.BinaryWrite(bytes); 

これは実際にエクセルオープンなどを強制するものではなく、クライアントがExcelで開くことができる最良の形式でコンテンツをクライアントに提示するだけです。ユーザーは「開く」をクリックする必要があり、Excelがインストールされている場合は、ファイルを開くための既定のアプリケーションになります。

クライアントにExcelがない場合、またはそのMIMEタイプがマップされていない場合などは動作しません。何かクレイジーなアクティブなブードゥー(私はお勧めしません)がなければ、あなたは "彼らのために優れたオープン"することができなくなります。

+0

1 - これはあなたができる最高です –

+2

サイドノート、COMオフィスDLLとの相互運用機能は、サーバー上でExcelファイルを生成するための本当に悪い方法です。さらに、Officeは実際にはそのような使用のために実際にライセンスされていません。私は非常にあなたのファイルを生成するNPOIやExcelLibraryなどのライブラリをお勧めします。 – Brook

+0

これは[Officeのサーバー側の自動化に関する考慮事項-KB 257757](http://support.microsoft.com/kb/257757)にすべて記載されています。 –

0

あなたは私に尋ねれば、大きな潜在的なセキュリティホールのようなサウンド!

ActiveXコントロールを起動する方法がありますか? (ActiveXはCOMオブジェクトの単なるマーケティング用語です)。私はASP.NETに慣れていないので、どのようにこれがサーバー/クライアントの境界上で動作するのかわかりません。

より簡単で安全なアプローチは、標準のhttpでCSVファイルを作成して送信することです。ユーザーはこれをExcelで開くことができます。単一のワークシートでは問題ありませんが、マクロや書式などの複雑なものでは問題ありません。

+0

問題をダウンロードすることができますなど –

2

COM INTEROPを使用しないでください!サーバー上のExcelを開くときEPPlus

それが実行されているエクセルのコピーを保持します:

は、もっと良い方法があります。恐ろしい。 EPPlusを使用すると、チャートやすべてのネイティブExcel 2007/2010ワークシートを作成できます。サーバー自体にオフィスをインストールする必要はありません。我々はそれを使用している、かなり滑らか。

クライアントがExcel 2007のまたはより良いを持っていない場合、彼らは、私は書式設定、複数のワークシートを持っているしたいのですが、私はここに直面していますcompatibility pack from microsoft.

+0

私はオープンソースライブラリの使用を検討しました。 COM相互運用機能については、Excelマクロの作成に精通している方が使いやすいということがうれしいです。EPPlusと同じように使いやすいと思うのは安全ですか? –

+2

@Tylerライセンスの問題だけでは、サーバー上のオフィスでCOM Interopを使用することができなくなります。これは、Chrisが上で述べたパフォーマンス上の問題には至りません。はい、あなたのファイルを作るために別のライブラリを習得しなければならないかもしれませんが、それはそれを明確に保つために必要なことです。 – Brook

+0

@Brook:私はInteropが最善の解決策ではないことを認識しています。この時点で、私はちょうど最高のサードパーティのAPIが何かと思っています。 –

関連する問題