c#导出excel的问题

1.关于后台返回了文件流但是前台并没有跳出文件下载的提示;

解:因为后台使用了一般处理程序,刚开始使用了post请求的方式,并没有半毛钱的作用。所以后来选择了在js里直接用href跳转的方式

 function outexcel() {
         //因为列表使用了多选框所以这里要对勾选的记录进行判断
    
            var rows = $('#tab_list').datagrid('getSelections');
            if (rows != "") {
                var result = "";
                for (var i = 0; i < rows.length; i++) {
                    if (result == "") {
                        result = rows[i].Id;
                    }

                    else
                        result = result + "," + rows[i].Id;
                }
                window.location.href = "XXXX.ashx?type=outexcel&Id=" + result;


            } else {
                msgShow('提示', '请选择要导出的报文', 'error');
            }
    

2、导出时主要用了一个网上找来的类

    /// <summary>
    /// 导出Excel文件,并自定义文件名
    /// </summary>
    public static void DataTable3Excel(System.Data.DataTable dtData, String FileName)
    {
        GridView dgExport = null;
        HttpContext curContext = HttpContext.Current;
        StringWriter strWriter = null;
        HtmlTextWriter htmlWriter = null;

        if (dtData != null)
        {
            //HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8);这句在使用的时候出现了部分乱码,由于我是使用了网页所以改成如下这句
HttpContext.Current.Response.Write("<meta http-equiv=Content-Type; content=text/html;charset=utf-8>"); curContext.Response.AddHeader(
"content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls"); curContext.Response.ContentType = "application nd.ms-excel"; curContext.Response.ContentEncoding = System.Text.Encoding.UTF8; curContext.Response.Charset = "GB2312"; strWriter = new StringWriter(); htmlWriter = new HtmlTextWriter(strWriter); dgExport = new GridView(); dgExport.DataSource = dtData.DefaultView; dgExport.AllowPaging = false; dgExport.DataBind(); dgExport.RenderControl(htmlWriter); curContext.Response.Write(strWriter.ToString()); curContext.Response.End(); } }

3、对于mysql导出excel时增加序号一列

select  @rownum:=@rownum+1 as rownum, 字段1,字段2 from XXX表 ,(select    @rownum:=0) as it  where 。。。。条件

切记(select @rownum:=0) as it一定是跟XXX表放一起的,千万不要放到where 后面去了。

这句话在mysql客户端用的好好的,结果在自己的程序里就爆了个错误。于是找了另一个方法直接在dataTable的前面加一列序号

   /// <summary>
    /// 将dt增加一列序号
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    public static DataTable AddCol(DataTable dt)
    {
        DataTable dtR;   //返回值  
        DataColumn dtNewCol = new DataColumn("序号", typeof(string)); //创建ID列  
        dt.Columns.Add(dtNewCol);
        dt.Columns["序号"].SetOrdinal(0);
        dtR = dt;
        int dtc = dtR.Rows.Count;    //dtc  行数  
        for (int i = 0; i < dtc; i++)
        {
            dtR.Rows[i]["序号"] = (i + 1).ToString();
        }
        return dtR;
    }  
原文地址:https://www.cnblogs.com/wangjiaxiaoxi/p/6598694.html