波斯码BOSSMA Information Technology

c#将数据集合导出Excel的方法(使用csv或制表符)

发布时间:2010年11月4日 / 分类:ASP.NET / 7,924 次浏览 / 评论

这是以前较为常用的一种方法。遍历数据集合,构造一个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

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯码,原文地址《c#将数据集合导出Excel的方法(使用csv或制表符)

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】