在datagrid往excel导数据时,会默认地把一些数值变成用科学计数法表示。
要解决这个问题,想了很多办法,比如往前面加单引号(在excel中直接在数字前直接输单引号可以让数字正常显示,但在 程序中加入的就不行,不知道为什么),或者是改变类型等等,都没有用,最后用了一个方法,就是在前面加空格。
以下是我的代码:
protected void BtnExcel_Click(object sender, EventArgs e)
{
dt = (DataTable)Session["dt"];
//防止excel中sn为科学计数法
for (int i = 0; i < dt.Rows.Count; i++)
dt.Rows[i][1] = " " + dt.Rows[i][1].ToString();//空格不是空出一格来,而是它的html标志
dg2.DataSource = dt.DefaultView;
dg2.DataBind();
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=PanDataList.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");//设置输出流为简体中文
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
dg2.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
dg2.ShowHeader = false;
Response.End();
}
这样导出的excel文档就是正常的了。
在网上有搜到这篇文章,但时间太少,来不及试验其中的做法。
稍后有时间再补上。http://www.cnblogs.com/huomm/articles/982862.html