C# datatable数据导出为excel,并解决长数据变为科学计数法问题

该方法为后台导出excel文件,然后链接返回到前台提供下载的方法

前台使用button事件的handler函数触发Export_excel()函数,并在后台下载成功后,前台通过返回的链接进行下载

Export_excel()函数构造为

var Export_excel = function () {

            var sKey = $("#sKey").val();//定义各类需要传的值
         //alert(sort +'-'+order); $.ajax({ url: "/AJAX/T_Grad_Info.ashx", data: { action: "print", skey: sKey },//传值,也就是后台datatable所需要导出的列,可以传多值,本工程中仅需传递查询的关键字 type: "post", timeout: 50000, success: function (r) { var domain = document.domain;//成功下载至后台后下载 var url = r; window.open(url); }, error: function (XMLHttpRequest, textStatus, errorThrown) { $.messager.alert('提示', '服务器错误,请稍后重试'); } }) }

 

后台产生datatable后

DataTable dt = PubClass.T_Grad_Info.GetList_part(strWhere, OrderSort);

                //为datatable添加标题,根据datatable的列进行添加
                dt.Columns[0].ColumnName = "姓名";
                
                string path = context.Server.MapPath("/download/");
                string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls";
                dataTableToExcel(dt, path + filename); //调用函数

                //string data = context.Request.Form["data"];
                //File.WriteAllText(context.Server.MapPath(fn), data, Encoding.UTF8);//如果是gb2312的xml申明,第三个编码参数修改为Encoding.GetEncoding(936)

                context.Response.Write("/download/" + filename);//返回文件路径提供下载
                context.Response.End();    

所调用的dataTableToExcel()为

//输出excel
        private void dataTableToExcel(DataTable table, string file)
        {
            //添加标签,解决数字在excel中变为科学计数法问题
            string title = "<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\"> <tr style=\"font-weight: bold; white-space: nowrap;\">";

            FileStream fs = new FileStream(file, FileMode.OpenOrCreate);

            //FileStream fs1 = File.Open(file, FileMode.Open, FileAccess.Read); 
            StreamWriter sw = new StreamWriter(new BufferedStream(fs), Encoding.UTF8);
            //System.Text.Encoding.Default

            title += "<td>" + "人数" + "</td>";//本人的项目中由于需要在excel的最前面添加标号,所以这里又进行了添加

            for (int i = 0; i < table.Columns.Count ; i++)
            {

                title += "<td>" + table.Columns[i].ColumnName  +"</td>"; //栏位:自动跳到下一单元格

            }

            title = "<td>" + title + "</td></tr>";

            sw.Write(title);

            int j = 1;

            foreach (DataRow row in table.Rows)
            {
                string line = "<tr>";

                line += "<td>" + j + "</td>";

                j++;

                for (int i = 0; i < table.Columns.Count ; i++)
                {

                    line += "<td style=\"vnd.ms-excel.numberformat:@\">" + row[i].ToString().Trim() + "</td>"; //内容:自动跳到下一单元格

                }
                line += "</tr>";

                //line =  line.Substring(0, line.Length - 1) ;  //截取最后一个字符

                sw.Write(line);

            }

            sw.Close();

            fs.Close();

        }

 

转载于:https://www.cnblogs.com/luckyhw/p/4958880.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值