- - PR -
クライアントへのEXCELファイルの保存
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-12-07 23:20
はじめまして。
VB.NETでWEBアプリケーションの開発をしております。 サーバー上で作成したEXCELファイルをクライアントに保存する機能を作成したいのですが、 開発経験の浅い私にはさっぱり方法がわかりません。 方法としては、EXCELへの貼り付け処理を行い(そこまではなんとかできました)、 そのまま処理を終了せずにクライアントに保存する方法と、 保存時に「名前を付けて保存」ダイアログを出す方法の両方を考えています。 申し訳ありませんが、どなたか教えていただけないでしょうか? どうか、よろしくお願いします。 | ||||
|
投稿日時: 2003-12-08 15:15
詳しい方法は過去にあがっているので、方法だけ。
EXCELへ貼り付けを行う (PasteSpecialなど、クリップボードを使うものは禁止) ↓ セッションIDなど、一意になるキーを含めたファイル名で保存 ↓ バイナリストリームで開く ↓ Response.Writeを使って、バイナリファイルとして返送 ↓ ファイルを削除する | ||||
|
投稿日時: 2003-12-08 16:42
Jittaさん、ありがとうございます。
早速、試してみたのですが、 EXCELファイルをいったんサーバーに保存するところまではできたのですが、 「バイナリストリームで開く」というのがうまくいきません。 response.writeを使うところまでは書いたのですが、 保存もせず、ダイアログも表示されないで、 画面にファイル名が表示されるだけになってしまいます。 申し訳ありませんが、もう少し教えていただけないでしょうか。 わがままばかりで申し訳ありませんが、宜しくお願いします。 | ||||
|
投稿日時: 2003-12-08 17:50
HttpResponse.BinaryWrite()とか。←MSDN調べてね あと、「ダウンロード」をキーにここの会議室も検索しておいてください。おそらく、「必要なヘッダの設定」もされていないと思います。 | ||||
|
投稿日時: 2003-12-08 18:49
Jittaさん、ありがとうございます。
早速、試してみました。 以下はコードです ****************************************************** (excelに貼り付け、"C:\Inetpub\wwwroot\EXCEL\test.xls"に保存済み) <ファイル名の指定> Dim File_Name As String File_Name = "C:\Inetpub\wwwroot\EXCEL\test.xls" <MSDNのサンプルより参照> Dim MyFileStream As FileStream Dim FileSize As Long MyFileStream = New FileStream(File_Name, FileMode.Open) FileSize = MyFileStream.Length Dim Buffer(CInt(FileSize)) As Byte MyFileStream.Read(Buffer, 0, CInt(FileSize)) MyFileStream.Close() <会議室の過去ログより参照> Current.Response.AddHeader("content-disposition", "attachment;filename =" + File_Name) Current.Response.ContentType = "application/excel" Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("Shift-Jis") Current.Response.BinaryWrite(Buffer) ****************************************************** 上記の内容で実行してみましたところ、ダウンロードは出来るようになりました。 ただ、いくつかおかしなところもあります。 「名前を付けて保存」画面で、デフォルトのファイル名がフォーム名になってしまいます。 さらに、ファイルの種類が「ドキュメント」となってしまいます。 これをexcelファイルで素直に保存できるようにできませんでしょうか? それと、ダウンロード実行前に、「ファイルのダウンロード」という画面が出ますが (ファイルを開くか、保存するかを選択するものです) これを出ないようにすることは可能でしょうか? いろいろお聞きして申し訳ありませんが、ご助言いただけますでしょうか? お手数をおかけしますが、宜しくお願い致します。 | ||||
|
投稿日時: 2003-12-08 21:46
私も、メインでやっているのは他の人なので詳しいところはわからないのですが。。。
>>>>> <会議室の過去ログより参照> Current.Response.AddHeader("content-disposition", "attachment;filename =" + File_Name) Current.Response.ContentType = "application/excel" <<<<< この辺かも。attachmentは「添付」ですから、添付ファイルが「filename=」なのに、フォームのコンテキストタイプ(内容)を「application/excel」にしている、ことになるのではないかな? 詳しいところは「RFC**を参照」という投稿があったと思います。そこに書いてあります。 #え?わたし?翻訳支援ソフトが明日くらいに到着するはず… | ||||
|
投稿日時: 2003-12-09 10:33
Jittaさん、ありがとうございます。
こちらでもいろいろ試してみました。 Current.Response.AddHeader("content-disposition", "attachment;filename =" + File_Name) のところで、File_Nameにパスまで入ってしまっていたので、"aaa.xls"とだけ指定したところ、 保存ダイアログにもその名称が出るようになりました。 ただ、そのファイル名に日本語が入ると、文字化けをしてしまいます。 これはおそらく、 System.Text.Encoding.GetEncoding("Shift-Jis") のあたりに問題があるのでしょうね。 もう少しいじってみます。 保存ダイアログの前に、ファイルを開くか保存するかを聞くダイアログが出ることに ついては、いろいろやりましたが、どうやっても出なくすることは出来ませんでした。 これはどうしようもないのでしょうか。 さらに調査してみます。 また何か情報がありましたら教えて下さい。 ありがとうございました。 | ||||
|
投稿日時: 2003-12-09 10:47
コンテキストタイプが「アプリケーション」になっているから、でしょう。「download/octet-stream」かな?スレッドがあったような気もします。 ファイル名が日本語の場合も、過去にスレッドがあがっています。探してみてください。 |