- - PR -
Excelファイルを作成せずにクライアントに保存させる
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-03-01 15:25
皆さんのスレッドをいつも参考にさせていただいています。
ひょっとしたら、過去の質問とかぶっているかもしれませんが、発見できませんでした・・ 是非ご教授をお願いします。 現在のやり方は、Excelファイルを作成してサーバーに一時的に保存し、 それをクライアント側がダウンロードして保存、という流れです。 コードは以下の通りです↓ ---------------------------------------------------------------------- (oWBはWorkBookです) File_Name = "C:〜" + Session.SessionID + ".xls"; eWorkbook.SaveCopyAs(File_Name); Stream MyStream = new FileStream(File_Name,FileMode.Open); long FileSize; FileSize = MyStream.Length; byte[] Buffer; Buffer = new byte[int.Parse(FileSize.ToString())]; MyStream.Read(Buffer,0,int.Parse(FileSize.ToString())); MyStream.Close(); string strFileName = Server.UrlEncode("〜.xls"); Response.AddHeader("Content-Disposition","attachment; filename=" + strFileName); Response.ContentType = "application/vnd.ms-excel"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("Shift-Jis"); Response.BinaryWrite(Buffer); Response.Flush(); Response.Close(); System.IO.File.Delete(File_Name); Response.End(); ----------------------------------------------------------------------- 上のようにSessionID名でExcelをサーバー側に一時的に保存しているのですが、 サーバーにファイルを作成せずにクライアントにダウンロードさせる方法を探しています。 どなたかご存知の方がいらっしゃいましたら、ご教授お願いします。 | ||||
|
投稿日時: 2005-03-01 15:38
組み合わせですよ。
1.作成させるリクエストを受ける 2.サーバでファイルを作成させる 3.ASPXがそのファイル読み取る 4.Responseに乗せて送り返す _________________ 中博俊 MSMVP Visual Studio C# Since 2004/04-2005/03, MCP http://naka.wankuma.com/ http://blogs.wankuma.com/naka/ naka@wankuma.com | ||||
|
投稿日時: 2005-03-01 15:49
お返事どうもありがとうございました。
簡潔なアドバイスだと思うのですが、いかんせん私の頭がおいついていません・・・ Webアプリケーションを初心者でご面倒をおかけします。 1の作成させるリクエストを受けるというのは、クライアントのリクエストですか? 3の読み取るというのもピンときません。 申し訳ないのですが、もうすこし砕いて教えていただけると助かります。 お手数ですが、よろしくお願いします。 | ||||
|
投稿日時: 2005-03-01 16:22
無理です。 できません。 ファイル形式を CSV にでもすれば可能性はありますが、それでも「サーバ側からクライアントに対して、ダウンロードデータの保存を指示」することはできません。 「ダウンロードしたデータをどーするかはクライアントの勝手」なのが、Web システムです。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||
|
投稿日時: 2005-03-01 17:13
お返事どうもありがとうございました。
不可能なのですね。分かりました。 サーバー側のファイルさえきちんと後で削除しておけば 特に問題はありませんよね? 渋木さん、どうもありがとうございました。 | ||||
|
投稿日時: 2005-03-01 17:15
Excelオートメーションでは、ストリームに直接書き込むことは
できないと思います。 従って、 1.Excelオートメーションで、ファイルを作成して保存 2.ファイルをResponseに流し込む という手順を変更することはできません。 なお、ASP.NETでOfficeオートメーションを使用するには、 別の問題にも注意する必要があります。 http://support.microsoft.com/kb/257757/JA/ | ||||
|
投稿日時: 2005-03-01 17:28
kanaiさん、詳しくご説明していただいて大変ありがとうございます。
すみません。もう少し教えてほしいのですが、 Office製品がStreamに書き込むことができないのですか? 例えばPDFだとしたら直接書き込むことができるのでしょうか。 | ||||
|
投稿日時: 2005-03-01 17:46
PDFの作成にどのようなツールを用いるのかによって変わりますが・・・ 以前に使用したiTextSharpというコンポーネントはストリームに 直接書き込めたので、一時ファイル保存の手順は不要でした。 (ActiveReportsも同様でした) Officeオートメーションは、「ユーザーの操作を自動化する」 のが目的ですので、ストリームの読み書きをサポートしていないのだと 思います。 |