这样到出长数字数字不正确,而且还是科学技术法,请问怎么解决#region  把datagrid导出到excel方法:
    public void CreateExcel(DataSet ds, string FileName)
    {
        System.Web.UI.WebControls.DataGrid dgExport = null;
        System.Web.HttpContext curContext = System.Web.HttpContext.Current;
        System.IO.StringWriter strWriter = null;
        System.Web.UI.HtmlTextWriter htmlWriter = null;
        DataTable dt = ds.Tables[0];
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                string temp = dt.Rows[i][j].ToString();
                bool flag = false;
                while (temp.IndexOf("\n") != -1)
                {
                    temp = temp.Replace("\n", " <br> ");
                    flag = true;
                }
                if (flag)
                    dt.Rows[i][j] = temp;            }        }        if (dt != null)
        {
            curContext.Response.ContentType = "application/vnd.ms-excel";
            curContext.Response.ContentEncoding = System.Text.Encoding.Default;
            curContext.Response.Charset = "gb2312";
            curContext.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=gb2312>");
            curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            //curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
            curContext.Response.AppendHeader("content-disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8));
            strWriter = new System.IO.StringWriter();
            htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);            // 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid  
            dgExport = new System.Web.UI.WebControls.DataGrid();
            dgExport.DataSource = dt.DefaultView;
            dgExport.AllowPaging = false;
            dgExport.DataBind();            // 返回客户端  
            dgExport.RenderControl(htmlWriter);
            curContext.Response.Write(strWriter.ToString());
            curContext.Response.End();
        }    }
    #endregion

解决方案 »

  1.   

    在导出前需要对字符格式做修改(针对出错的格式,具体情况有差异)
    以下代码针对将GridView中数据导出到excel做的修改//文本:vnd.ms-excel.numberformat:@
    //日期:vnd.ms-excel.numberformat:yyyy/mm/dd
    //数字:vnd.ms-excel.numberformat::#,##0.00
    //货币:vnd.ms-excel.numberformat¥#,##0.00
    //百分比:vnd.ms-excel.numberformat:#0.00%
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
      for(int i=0;i<e.Row.Cells.Count;i++)
      {
        if(e.Row.RowType==DataControlRowType.DataRow)
        {
          e.Row.Cells[i].Attributes.Add("style","vnd.ms-excel.numberformat:@");
        }
      }
    }具体加什么看你需要转换的字符而定
      

  2.   

     
    //文本:vnd.ms-excel.numberformat:@
    //日期:vnd.ms-excel.numberformat:yyyy/mm/dd
    //数字:vnd.ms-excel.numberformat::#,##0.00
    //货币:vnd.ms-excel.numberformat¥#,##0.00
    //百分比:vnd.ms-excel.numberformat:#0.00%//在excel中数字位数大于11位,都回默认以科学技术法出现,所以有E+.
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
      for(int i=0;i<e.Row.Cells.Count;i++)
      {
        if(e.Row.RowType==DataControlRowType.DataRow)
        {
          //表示对每一行以字符串的形式输出
          e.Row.Cells[i].Attributes.Add("style","vnd.ms-excel.numberformat:@");
        }
      }
    }
    //如果你想对导出的execl的某一行进行以字符串输出,而不想用科学计数法出现,则需要上面方法,最好对某一列以字符串输出,excel也是从0列开始的.
      

  3.   

     
     
    //文本:vnd.ms-excel.numberformat:@
    //日期:vnd.ms-excel.numberformat:yyyy/mm/dd
    //数字:vnd.ms-excel.numberformat::#,##0.00
    //货币:vnd.ms-excel.numberformat¥#,##0.00
    //百分比:vnd.ms-excel.numberformat:#0.00%//在excel中数字位数大于11位,都回默认以科学技术法出现,所以有E+.protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.EditItem)
            {
               //表示datagrid的第10列和第25列以字符串的形式输出,你得数一下你的datagrid的第几列是以科学技术法出现的,然后你在写在下面的方法.
                e.Item.Cells[10].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
                e.Item.Cells[25].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
            }
            else if (e.Item.ItemType == ListItemType.Footer)
            {
               
            }
        }
    //如果你想对导出的execl的某一行进行以字符串输出,而不想用科学计数法出现,则需要上面方法,最好对某一列以字符串输出.