c#将数据集合导出Excel的方法(使用csv或制表符)
2010年11月4日 | 分类: ASP.NET | 标签: excel, 导出excel (2,182 views)

这是以前较为常用的一种方法。遍历数据集合,构造一个table或者构造csv结构,然后输出到客户端(或者先生成后下载)。

以DataTable为例:
public void CreateExcel(DataTable dt, string FileName)
    {
        HttpResponse resp;
        resp = Page.Response;
        resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
        resp.ContentType = "application/vnd.ms-excel";
        string colHeaders = "", ls_item = "";
 
        //可以类似dt.Select("id>10")之形式达到数据筛选目的
        DataRow[] myRow = dt.Select();
        int i = 0;
        int cl = dt.Columns.Count;
 
        //各列之间以\t分割,最后一个列标题后加回车符
        for (i = 0; i < cl; i++)
        {
            //最后一列,加\n
            if (i == (cl - 1))
            {
                colHeaders += dt.Columns[i].Caption.ToString() + "\n";
            }
            else
            {
                colHeaders += dt.Columns[i].Caption.ToString() + "\t";
            }
 
        }
 
        //向HTTP输出流中写入取得的数据信息
        resp.Write(colHeaders);
 
        //逐行处理数据  
        foreach (DataRow row in myRow)
        {
            //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据    
            for (i = 0; i < cl; i++)
            {
                //最后一列,加\n
                if (i == (cl - 1))
                {
                    ls_item += row[i].ToString() + "\n";
                }
                else
                {
                    ls_item += row[i].ToString() + "\t";
                }
 
            }
            resp.Write(ls_item);
            ls_item = "";
 
        }
        resp.End();
    }
 
    protected void Button1_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("编号");
        dt.Columns.Add("姓名");
        dt.Columns.Add("性别");
 
        dt.Rows.Add("001", "张三", "男");
        dt.Rows.Add("002", "李四", "女");
 
        CreateExcel(dt, "class.xls");
    }

其它数据集合类似,如DataView、List等,我们只需要创建行和列就可以了。

还可以使用文件流生成文件然后下载:
  
 
public void CreateExcelFileStream(DataTable dt, string FileName)
    {
        //生成文件在服务器端
        string name = Server.MapPath(FileName);
        FileStream fs = new FileStream(name, FileMode.Create, FileAccess.Write);
        StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("gb2312"));
        sw.WriteLine("编号,姓名,年龄");
 
        foreach (DataRow dr in dt.Rows)
        {
            sw.WriteLine(dr[0].ToString() + "," + dr[1].ToString() + "," + dr[2].ToString());
        }
        sw.Close();
 
        //下载文件
        Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(FileName));
        Response.ContentType = "application/vnd.ms-excel";
        Response.WriteFile(name);
        Response.End();
    }

本文参考:http://blog.csdn.net/jilm168/archive/2007/11/06/1869118.aspx