ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  420  : 記事  0  : コメント  9425  : トラックバック  76

ニュース

さて、今年は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

CSV でダウンロードというのはこれだけ技術が進歩した現在でも根強く残っている
ユーザーは CSV のデータが欲しいわけではない、Excel で扱えるデータが欲しいのだ
手っ取り早いのと前例が多いために、妥協の果てに CSV に落ち着くのである

しかし .NET においては下記のようにした方が CSV よりもコーディングも少ないし付加できる情報も CSV より多いと思うわけで
private void Button1_Click(object sender, System.EventArgs e)
{
    DataGrid grid = new DataGrid();
    grid.HeaderStyle.BackColor = Color.Gray;
    grid.HeaderStyle.Font.Bold = true;
    grid.ItemStyle.BackColor = Color.SkyBlue;
    grid.AlternatingItemStyle.BackColor = Color.LightYellow;
    grid.DataSource = this.CreateDataSource();
    grid.DataBind();
    base.Response.ContentType = "application/vnd.ms-excel";
    base.Response.AppendHeader("content-disposition", "attachment;filename=hoge.xls");
    using (HtmlTextWriter writer = new HtmlTextWriter(base.Response.Output))
    {
        try
        {
            grid.RenderControl(writer);
            writer.Flush();
            base.Response.End();
        }
        finally
        {
            writer.Close();
        }
    }
}
CreateDataSource は Northwind の Employees からデータを取得しているだけです
新たに DataGrid を new しているのは、通常画面側ではスタイルの指定に CSS を使用しているであろうから
そうでなければ、画面の DataGrid をそのまま RenderControl してやればいい
別に表形式だけに限らない
要は HTML で表現できるならなんでもいいのだ
HtmlGenericControl div = new HtmlGenericControl("div");
してやって、Control を Add してやって RenderControl してやれば大抵の表現はできる
これならサーバに何もインストールする必要もなく、表現豊かな Excel ファイルがダウンロードできる
がんばって Excel が吐き出す HTML を解析すれば、書式の指定だって不可能じゃない
000001 が 1 にならなくてすむし、分数が日付に変換されないようにすることも可能だ(しんどいけど)
ASP.NET ではせっかく各コントロールが HTML 情報を持ってるんだから積極的に使ってやるべきだ
投稿日時 : 2006年11月24日 8:05

コメント

# re: Excel でダウンロード 2006/11/25 22:23 Jitta
これ、いいですね。次からここへ誘導しよう。

# re: Excel でダウンロード 2006/11/26 0:52 THREE-ONE
ありがとうございます
データのダウンロードから帳票まで、幅広くできるのでお気に入りです
CSV なんてものは早く過去の遺物にしてしまったほうが、開発者・ユーザーどちらも幸せになれます、きっと

# 続、Excel でダウンロード 2007/02/04 17:27 へぼろっぱぁ
続、Excel でダウンロード

# re: Excel でダウンロード 2008/09/11 10:40 es
出力したエクセルファイルの中、タイトルの編集方法を教えていただきますか?_

# re: Excel でダウンロード 2008/09/12 13:22 THREE-ONE
タイトルというのは、どの部分でしょうか?
シート名ということでよいでしょうか?

# Hiro's Site » ASP.NET???GridView????????????EXCEL?????????????????????????????????????????????????????? 2011/06/05 0:59 Pingback/TrackBack
Hiro's Site » ASP.NET???GridView????????????EXCEL??????????????????????????????????????????????????????

Post Feedback

タイトル
名前
Url:
コメント: