@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Excelファイルを作成せずにクライアントに保存させる

投稿者投稿内容
oni-chan
会議室デビュー日: 2004/07/15
投稿数: 9
投稿日時: 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をサーバー側に一時的に保存しているのですが、
サーバーにファイルを作成せずにクライアントにダウンロードさせる方法を探しています。
どなたかご存知の方がいらっしゃいましたら、ご教授お願いします。

中博俊
ベテラン
会議室デビュー日: 2004/10/17
投稿数: 91
お住まい・勤務地: 大阪市
投稿日時: 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
oni-chan
会議室デビュー日: 2004/07/15
投稿数: 9
投稿日時: 2005-03-01 15:49
お返事どうもありがとうございました。
簡潔なアドバイスだと思うのですが、いかんせん私の頭がおいついていません・・・
Webアプリケーションを初心者でご面倒をおかけします。

1の作成させるリクエストを受けるというのは、クライアントのリクエストですか?
3の読み取るというのもピンときません。

申し訳ないのですが、もうすこし砕いて教えていただけると助かります。
お手数ですが、よろしくお願いします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-03-01 16:22
引用:

サーバーにファイルを作成せずにクライアントにダウンロードさせる方法を探しています。



無理です。
できません。

ファイル形式を CSV にでもすれば可能性はありますが、それでも「サーバ側からクライアントに対して、ダウンロードデータの保存を指示」することはできません。

「ダウンロードしたデータをどーするかはクライアントの勝手」なのが、Web システムです。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
oni-chan
会議室デビュー日: 2004/07/15
投稿数: 9
投稿日時: 2005-03-01 17:13
お返事どうもありがとうございました。

不可能なのですね。分かりました。
サーバー側のファイルさえきちんと後で削除しておけば
特に問題はありませんよね?

渋木さん、どうもありがとうございました。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-03-01 17:15
Excelオートメーションでは、ストリームに直接書き込むことは
できないと思います。

従って、
 1.Excelオートメーションで、ファイルを作成して保存
 2.ファイルをResponseに流し込む
という手順を変更することはできません。

なお、ASP.NETでOfficeオートメーションを使用するには、
別の問題にも注意する必要があります。

http://support.microsoft.com/kb/257757/JA/
oni-chan
会議室デビュー日: 2004/07/15
投稿数: 9
投稿日時: 2005-03-01 17:28
kanaiさん、詳しくご説明していただいて大変ありがとうございます。

すみません。もう少し教えてほしいのですが、
Office製品がStreamに書き込むことができないのですか?
例えばPDFだとしたら直接書き込むことができるのでしょうか。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-03-01 17:46
引用:

Office製品がStreamに書き込むことができないのですか?
例えばPDFだとしたら直接書き込むことができるのでしょうか。



PDFの作成にどのようなツールを用いるのかによって変わりますが・・・

以前に使用したiTextSharpというコンポーネントはストリームに
直接書き込めたので、一時ファイル保存の手順は不要でした。
(ActiveReportsも同様でした)

Officeオートメーションは、「ユーザーの操作を自動化する」
のが目的ですので、ストリームの読み書きをサポートしていないのだと
思います。

スキルアップ/キャリアアップ(JOB@IT)