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

CSVファイルを一度に複数出力したい

1
投稿者投稿内容
きたさん
常連さん
会議室デビュー日: 2003/09/11
投稿数: 26
投稿日時: 2003-11-21 19:39
いつも勉強させてもらっています。よろしくお願いします。

言語C# ASP.NetでWebアプリケーションを開発しています。
CSV出力をすることはできるのですが、一度に複数のCSVファイルを出力できずに困っています。具体的に言うと、
AA
BB
CC
というデータのリストがあったとして、それを
AA.CSV
BB.CSV
CC.CSV
という風に、複数のファイルに分割して出力したいのです。
以下の方法では一つのファイルしか出力できないので困っています
Response.Clear();
Response.AddHeader("Content-position","attachment;filename=test.csv");
Response.AddHeader("media-type","application/octet-stream");
System.Text.Encoding enc = System.Text.Encoding.GetEncoding("Shift-JIS");
Response.BinaryWrite(enc.GetBytes("A,B,C,D,E,F"));
Response.End();

の処理をループするようなイメージです

わかる方いらっしゃいましたらご教授よろしくお願い致します。

TEA-BREAK
会議室デビュー日: 2003/11/16
投稿数: 10
投稿日時: 2003-11-22 00:18
どもです。
私も以前同じなやみにぶち当たりました。

結局方法がわからずに、結局無理でした・・・。
果たして出来るのでしょうか・・・?

意味の無いレスですみません。
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2003-11-22 12:56
こんにちは〜

1度でもResponseを終了させたら、そこまでしかクライアント側では認識できないです。
なので、ダウンロードするファイルの分だけ画面を開くしかないと思います。

引用:

いつも勉強させてもらっています。よろしくお願いします。

言語C# ASP.NetでWebアプリケーションを開発しています。
(省略)
Response.Clear();
Response.AddHeader("Content-position","attachment;filename=test.csv");
Response.AddHeader("media-type","application/octet-stream");
System.Text.Encoding enc = System.Text.Encoding.GetEncoding("Shift-JIS");
Response.BinaryWrite(enc.GetBytes("A,B,C,D,E,F"));
Response.End();
(省略)


きたさん
常連さん
会議室デビュー日: 2003/09/11
投稿数: 26
投稿日時: 2003-11-23 00:50
みなさんご返答ありがとうございます。

やはり画面を繰り返し開くしかないのでしょうか?なにか別の方法で対処したいと思います。貴重なご意見ありがとうございました。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-11-25 11:51
ども、ほむらです。
詳しいやり方はあまり公にはしないほうがいい気がするので答えだけ・・・
一つのページで複数のファイルをダウンロードすることは可能です。

詳細はRFC2822(Internet Message Fromat)を読んでください。
これは、メールに限ったフォーマットではありません。。

といっても、IEの場合MIMEタイプを無視してしまうので。。。
もしかしたらそのまま表示してしまうかも^^;;;;
和ジラではちゃんと複数ファイル転送できましたよ。

#もう一つ追記
#RFC2046(Multipurpose Internet Mail Extensions Media Type)も重要みたいです。
#というかこっちが本命ですね(笑

[ メッセージ編集済み 編集者: ほむら 編集日時 2003-11-25 14:11 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2003-11-25 14:24
あまりいい方法では無いのかもしれませんが・・・
僕の場合は
1.hiddenコントロールをrunat=serverでページに配置して、
2.サーバ側で生成したファイルのURLをセットし、
3.onload時にhiddenコントロールに値が入っていたらそのURLを新しいWindowで表示し
値をクリアするjavascriptを書く
ことで対処していたりします。

Ru.F
会議室デビュー日: 2003/11/21
投稿数: 17
投稿日時: 2003-11-25 15:28
こんにちは、Ru.Fと申します。

(1)DBなどから取得したリストを各CSVに分類して保存する
(2)作成したCSVをクライアント側に1アクションで取得する

以上で間違いないでしょうか。
違っていたらごめんなさい。

CSVファイルをサーバ内に作成、クライアント側のJavaScriptにより
サーバ内のCSVファイルを呼ぶ形で(1)(2)はクリアできます。
しかし、画面を複数開くのは好ましくないようですので
的外れかもしれません。

いったんデータをローカルに保持させるにしても
別の方法を探されたほうが良いと思います。

コード:
private void Button1_Click(object sender, System.EventArgs e)
{
	//CSVファイルを作成
	System.IO.StreamWriter swA = new System.IO.StreamWriter("C:\\..\\wwwroot\\AA.csv");
	swA.WriteLine("a");
	swA.WriteLine("aa");
	swA.WriteLine("aaa");
	swA.Close();	   

	System.IO.StreamWriter swB = new System.IO.StreamWriter("C:\\..\\wwwroot\\BB.csv");
	swB.WriteLine("b");
	swB.WriteLine("bb");
	swB.WriteLine("bbb");
	swB.Close();	   

	System.IO.StreamWriter swC = new System.IO.StreamWriter("C:\\..\\wwwroot\\CC.csv");
	swC.WriteLine("c");
	swC.WriteLine("cc");
	swC.WriteLine("ccc");
	swC.Close();

	・・・

	//作成したCSVファイルを表示する
	Response.Write("<script language=\"javascript\">");
	Response.Write("	window.open(\"http://localhost/AA.csv\");");
	Response.Write("	window.open(\"http://localhost/BB.csv\");");
	Response.Write("	window.open(\"http://localhost/CC.csv\");");
	Response.Write("</script>");

}

1

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