gridview导出到excel有很多方法,这里列出两种,其中第一种是导出,第二种应该叫写入。在此推荐第二种方法。贴代码 :
第一种,在按钮单击事件里写:
       //首先清除分页      
       GridView1.AllowPaging = false;
        GridView1.DataBind();
        Response.Clear();
        Response.Buffer = true;
        //设定输出的字符集
        Response.Charset = "GB2312";
        //解决导出乱码问题
        Response.Write("<meta http-equiv=Content-Type content=text/html;charset=GB2312>");
 
        //假定导出的文件名为test.xls
        Response.AppendHeader("Content-Disposition", "p_w_upload;filename=test.xls" .ToString());
        //解决导出乱码问题
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
 
        //设置导出文件的格式
        Response.ContentType = "application/ms-excel";
        //关闭ViewState
        this.EnableViewState = false;
        StringWriter stringWriter = new StringWriter();
        HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter);
        GridView1.RenderControl(textWriter);
        //把HTML写回浏览器
        Response.Write(stringWriter.ToString());
        Response.Flush();
        Response.End();
        GridView1.AllowPaging = true;//恢复分页
        //为GridView重新绑定数据源
        GridView1.DataBind(); ;
}
另外,要在下面再加上一段代码:
public override void VerifyRenderingInServerForm(Control control)
    {
       
    }
这种方式其实并不是真正的导出了excel,用记事本打开该文件,你会发现它是html代码。如果只是简单的把数据导出来,倒是可以考虑。
第二种,是把gridview的每个单元格的内容读出来然后写入到excel对应的单元格里。
 if (GridView1.Rows.Count == 0)
            return;
        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
        excel.Application.Workbooks.Add(true);
        excel.Visible = true;
        for (int j = 0; j < GridView1.Columns.Count; j++) {
            excel.Cells[1, j + 1] = GridView1.Columns[j].HeaderText;
        }
            for (int j = 0; j < GridView1.Rows.Count; j++)
            {
                for (int k = 0; k < GridView1.Columns.Count; k++)
                {
                    excel.Cells[j + 2, k + 1] = GridView1.Rows[j].Cells[k].Text;
                }
           }
这种方法要注意的是,首先应该引用Microsoft.office.interop.excel 11.0.0.0;
另外,如果前台gridview是自动生成字段,那么gridview.columns是获取不到值的,为0。
还有,excel单元格 Cells[]中的索引,它是从1开始的,和gridview从0开始不一样。