转自http://www.cnblogs.com/zhangjd/p/5673950.html
这段时间用到了导出Excel的功能,这个功能还是比较常用的,我常用的有两个方法,现在整理一下,方便以后查看。
一、实现DataTable数据导出到本地,需要自己传进去导出的路径。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /// <summary>/// DataTable导出到Excel/// </summary>/// <param name="table">DataTable类型的数据源</param>/// <param name="file">需要导出的文件路径</param>publicvoiddataTableToCsv(DataTable table, stringfile){    stringtitle = "";    FileStream fs = newFileStream(file, FileMode.OpenOrCreate);    StreamWriter sw = newStreamWriter(newBufferedStream(fs), System.Text.Encoding.Default);    for(inti = 0; i < table.Columns.Count; i++)    {        title += table.Columns[i].ColumnName + "\t"; //栏位:自动跳到下一单元格    }    title = title.Substring(0, title.Length - 1) + "\n";    sw.Write(title);    foreach(DataRow row intable.Rows)    {        stringline = "";        for(inti = 0; i < table.Columns.Count; i++)        {            line += row[i].ToString().Trim() + "\t"; //内容:自动跳到下一单元格        }        line = line.Substring(0, line.Length - 1) + "\n";        sw.Write(line);    }    sw.Close();    fs.Close();} | 
二、实现DataTable数据导出到本地,路径可以由用户自主选择。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | /// <summary>/// DataTable导出到Excel/// </summary>/// <param name="dt">DataTable类型的数据源</param>/// <param name="FileType">文件类型</param>/// <param name="FileName">文件名</param>publicvoidCreateExcel(DataTable dt, stringFileType, stringFileName){    Response.Clear();    Response.Charset = "UTF-8";    Response.Buffer = true;    Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");    Response.AppendHeader("Content-Disposition", "attachment;filename=\""+ System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls\"");    Response.ContentType = FileType;    stringcolHeaders = string.Empty;    stringls_item = string.Empty;    DataRow[] myRow = dt.Select();    inti = 0;    intcl = dt.Columns.Count;    for(intj = 0; j < dt.Columns.Count; j++)    {        ls_item += dt.Columns[j].ColumnName + "\t"; //栏位:自动跳到下一单元格    }    ls_item = ls_item.Substring(0, ls_item.Length - 1) + "\n";    foreach(DataRow row inmyRow)    {        for(i = 0; i < cl; i++)        {            if(i == (cl - 1))            {                ls_item += row[i].ToString() + "\n";            }            else            {                ls_item += row[i].ToString() + "\t";            }        }        Response.Output.Write(ls_item);        ls_item = string.Empty;    }    Response.Output.Flush();    Response.End();} | 
三、方法的调用。
第一种方法的调用:
| 1 | this.dataTableToCsv(dt, @"C:\Users\Admin\Desktop\收听率"+ DateTime.Now.ToString("yyyy-MM-dd HHmmss") + ".xls"); //调用函数 | 
第二种方法的调用:
| 1 | CreateExcel(dt, "application/ms-excel", "Excel"+ DateTime.Now.ToString("yyyy-MM-dd HHmmss") + ".xls");//调用函数 | 
这两种方法都是可以直接调用的,只需要传入需要的参数即可。
如果是通过前台js方式实现,跳转href为实现数据导出的页面地址,我是通过前台跳转到ashx页面实现的
ashx页面内容
public void ProcessRequest(HttpContext context)
        {string message = "";
            string Action = context.Request["Action"];
            switch (Action)
            {case "Excel":
                    DataTable Radio = GetExcleData(context); //获取导出数据源
                    RadioCommon helper = new RadioCommon();
                    helper.ExportExcel(Radio, "application/ms-excel", "Excel" + DateTime.Now.ToString("yyyy-MM-dd HHmmss"));
                    break;
            }
            context.Response.Write(message);
        }
js部分内容
  $("#Excel").bind(‘click‘, function () {
                var url = "AjaxHandler/RadioFamilyDayNumber.ashx?Action=Excel";
                window.location.href = url;//导出Excel
            })
原文:http://www.cnblogs.com/Jeremy2001/p/6731230.html