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 = "";

            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 += "";//本人的项目中由于需要在excel的最前面添加标号,所以这里又进行了添加for (int i = 0; i < table.Columns.Count ; i++)
            {

                title += ""; //栏位:自动跳到下一单元格
            }

            title = "";

            sw.Write(title);

            int j = 1;

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

                line += "";

                j++;

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

                    line += ""; //内容:自动跳到下一单元格
                }
                line += "";

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

            }

            sw.Close();

            fs.Close();

        }

 

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

你可能感兴趣的:(C# datatable数据导出为excel,并解决长数据变为科学计数法问题)

" + "人数" + " " + table.Columns[i].ColumnName +" " + title + "
" + j + "" + row[i].ToString().Trim() + "