欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

.net导出Excel的处理方法(解决科学记数法的问题)

创建时间:2017年06月24日 17:44  阅读次数:(9330)
分享到:
之前在导出Excel的时候,总是会以科学记数法显示较大数字,甚至一些字符比如"10500E000054"也会被认为是数字而以科学记数法的方式显示,很是麻烦,网上搜索不少资料,终于解决,记录如下:

第一种方法导出Excel,会产生科学记数法的问题:
public void CreateExcel(DataTable dt, IList<KeyValuePair<string, string>> head, string FileType, string FileName)
{
Response.Clear();
Response.Charset = "UTF-8";
Response.Buffer = true;
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls\"");
Response.ContentType = FileType;

string colHeaders = string.Empty;

StringWriter sw = new StringWriter();
foreach (KeyValuePair<string, string > k in head)
{
    if (dt.Columns.Contains(k.Key))
    {
        sw.Write(k.Value + "\t");
    }
}
sw.Write(sw.NewLine);

string ls_item = string.Empty;
int cl = dt.Columns.Count;
foreach (DataRow row in dt.Rows)
{
    foreach (KeyValuePair<string, string > k in head)
    {
        if (dt.Columns.Contains(k.Key))
        {
            sw.Write(row[k.Key].ToString() + "\t");
        }
    }
    sw.Write(sw.NewLine);
}
Response.OutPut.Flush();
Response.Write(sw);
Response.End();
}

这种方法会保留Excel原生的网络线。

第二种方法,解决科学记数法的问题:
public void CreateExcel(DataTable dt, IList<KeyValuePair<string, string>> head, string FileType, string FileName)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentType = "Application/vnd.ms-xls";
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls");
StringBuilder table = new StringBuilder();
table.Append("<table border=1 ><tr >");

foreach (KeyValuePair<string, string > k in head)
{
    if (dt.Columns.Contains(k.Key))
    {
        table.Append("<td style='font-weight:bold' >");//标题加粗显示
        table.Append(k.Value); //表格的标题  
        table.Append("</td >");
    }
}
table.Append("</tr >");

foreach (DataRow row in dt.Rows)
{
    table.Append("<tr >");

    foreach (KeyValuePair<string, string > k in head)
    {
        if (dt.Columns.Contains(k.Key))
        {
            table.Append("<td style='vnd.ms-excel.numberformat:@' >");
            table.Append(row[k.Key].ToString());
            table.Append("</td >");
        }
    }
    table.Append("</tr >");
}

table.Append("</table >");
HttpContext.Current.Response.Write(table);
HttpContext.Current.Response.End();
}

这种方法解决了科学记数法的问题,但默认会不显示网格线,用户可能会不喜欢,所以我在table.Append("<table border=1 ><tr >");中加了border=1模拟网格线,效果还不错。

本人喜欢第二种方法,主要可以使用css来控制导出的样式,非常方便。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论2条
  • #1楼  评论人:xxxxx  评论时间:2018-7-30 23:22:45
  • aaaaaaaaaaa
  • #2楼  评论人:51testing软件测试网编辑  评论时间:2020-8-13 10:07:21
  • 您好!我是51testing软件测试网编辑,您的这篇文章写得很好:我们想要转载让更多人看到,希望您能够同意,非常感谢!
发表评论:
留言人:
内  容:
请输入问题 20+51=? 的结果(结果是:71)
结  果: