DataGrid导出到Excel的时候,某些数字内容显示不正确,"3.62201E+14"的格式 ,003会变成3

yskang 2009-08-12 11:49:46
这样到出长数字数字不正确,而且还是科学技术法,请问怎么解决





#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
...全文
1111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yskang 2009-08-14
  • 打赏
  • 举报
回复
能给粘个详细点的不
wdzr_826 2009-08-13
  • 打赏
  • 举报
回复
可以转化为字符格式,前面加一个"'"号
另楼上诸位方法可以试试。
chenjianyong94 2009-08-13
  • 打赏
  • 举报
回复


//文本: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的某一行进行以字符串输出,而不想用科学计数法出现,则需要上面方法,最好对某一列以字符串输出.
zjywind 2009-08-13
  • 打赏
  • 举报
回复
偶也遇到过这种问题今天学习了。
拿走了,呵呵
chenjianyong94 2009-08-13
  • 打赏
  • 举报
回复
 
//文本: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列开始的.
Nihn 2009-08-13
  • 打赏
  • 举报
回复
学习了!
CopperBell 2009-08-13
  • 打赏
  • 举报
回复
在导出前需要对字符格式做修改(针对出错的格式,具体情况有差异)
以下代码针对将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:@");
}
}
}

具体加什么看你需要转换的字符而定
gongsun 2009-08-13
  • 打赏
  • 举报
回复
...

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧