gridview导出到excel有很多方法,这里列出两种,其中第一种是导出,第二种应该叫写入。在此推荐第二种方法。贴代码 :
第一种,在按钮单击事件里写:
//首先清除分页
GridView1.AllowPaging = false;
GridView1.DataBind();
Response.Clear();
Response.Buffer = true;
//设定输出的字符集
Response.Charset = "GB2312";
//解决导出乱码问题
Response.Write("");
//假定导出的文件名为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开始不一样。0daybank
文章评论