asp.netDataTable导出excel方法(1)

来源:互联网 发布:jy淘宝店网址 编辑:程序博客网 时间:2024/06/06 05:28

先来写一段代码,这段代码也是我在网上找的,但是他那个原先有点问题,我对他那个进行了修改,现在这个代码是我修改改过的,应该没有问题的。

 1  public int StreamExport(System.Data.DataTable dt, List<string> ColNames, string fileName) 2         { 3  4             if (string.IsNullOrEmpty(fileName)) return 0; 5  6             StringBuilder content = new StringBuilder(); 7             StringBuilder strtitle = new StringBuilder(); 8             content.Append("<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>"); 9             content.Append("<head><title></title><meta http-equiv='Content-Type' content=\"text/html; charset=gb2312\">");10             //注意:[if gte mso 9]到[endif]之间的代码,用于显示Excel的网格线,若不想显示Excel的网格线,可以去掉此代码11             content.Append("<!--[if gte mso 9]>");12             content.Append("<xml>");13             content.Append(" <x:ExcelWorkbook>");14             content.Append("  <x:ExcelWorksheets>");15             content.Append("   <x:ExcelWorksheet>");16             content.Append("    <x:Name>Sheet1</x:Name>");17             content.Append("    <x:WorksheetOptions>");18             content.Append("      <x:Print>");19             content.Append("       <x:ValidPrinterInfo />");20             content.Append("      </x:Print>");21             content.Append("    </x:WorksheetOptions>");22             content.Append("   </x:ExcelWorksheet>");23             content.Append("  </x:ExcelWorksheets>");24             content.Append("</x:ExcelWorkbook>");25             content.Append("</xml>");26             content.Append("<![endif]-->");27             content.Append("</head><body><table style='border-collapse:collapse;table-layout:fixed;'><tr>");28             for (int i = 0; i < ColNames.Count; i++)29             {30 31                 content.Append("<td><b>" + ColNames[i] + "</b></td>");32             }33             content.Append("</tr>\n");34 35             for (int j = 0; j < dt.Rows.Count; j++)36             {37                 content.Append("<tr>");38                 for (int k = 0; k < dt.Columns.Count; k++)39                 {40                     object obj = dt.Rows[j][k];41                     Type type = obj.GetType();42                     if (type.Name == "Int32" || type.Name == "Single" || type.Name == "Double" || type.Name == "Decimal")43                     {44                         double d = obj == DBNull.Value ? 0.0d : Convert.ToDouble(obj);45                         if (type.Name == "Int32" || (d - Math.Truncate(d) == 0))46                             content.AppendFormat("<td style='vnd.ms-excel.numberformat:#,##0'>{0}</td>", obj);47                         else48                             content.AppendFormat("<td style='vnd.ms-excel.numberformat:#,##0.00'>{0}</td>", obj);49                     }50                     else51                         content.AppendFormat("<td style='vnd.ms-excel.numberformat:@'>{0}</td>", obj);52                 }53                 content.Append("</tr>\n");54             }55             content.Append("</table></body></html>");56             content.Replace("&nbsp;", "");57             Response.Clear();58             Response.Buffer = true;59             Response.ContentType = "application/vnd.ms-excel";  //"application/ms-excel";60             Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");61             Response.Charset = "gb2312";62             fileName = System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);63             Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);64             Response.Write(content.ToString());65             Response.Output.Flush();66             //pages.Response.End();  //注意,若使用此代码结束响应可能会出现“由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。”的异常。67             HttpContext.Current.ApplicationInstance.CompleteRequest(); //用此行代码代替上一行代码,则不会出现上面所说的异常。68             return 1;69         }

 下面来写写通过这次导出我的总结。

首先我是第一次做将datatable导出成excel,而且对Jquery和asp.net都不太熟,完全是个小白,在这个过程中遇到很多问题,解决也花了很长一段时间。在这里做个总结,给跟我一样的小白点参考。

(先说个题外话,一开始不是很懂的人看这段代码可能会很奇怪拼接excel的格式为什么很类似html的语法,我也纳闷,百度了一下发现原来html和excel的编码是一样的,后来去做别的系统的excel导出时发现同事用了拼接table的方法去组成excel也证明了这一点,而且table的格式在excel中也是通用的。)

1.导出的excel怎样传回html页让他下载?

一开始我用的是ajax提交表格,但后来怎么点击按钮都没有反应,查了半天才知道,ajax只能返回的数据只能是文本形式,而在上面代码第63行也就是

Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);

已经把返回的值改成了下载文件,所以ajax不能用了。后来又查到window.Location,这个很简单,只要在原来html页的方法里加上window.Localtion=“你的url”就可以了,但另一个问题出现了,点击完按钮之后我的整个页面都处于加载状态,并不是我想要的结果。后来问了同事才知道,原来直接用a标签就可以解决怪自己觉得这个太高大上了a标签应该不行,结果用了那么多复杂的方法都没成,没想到最简单的却解决了问题。

2.如何在a标签传递参数?

因为导出的excel要和根据不同条件查询出来结果一致的,所以传入的参数不是固定的,那么a标签的herf就不能在一开始就写好了,采用a标签的onclick方法,先把href初始值设成Javascript(0)(好像是这样写,我也忘了)让它无路径,再在方法中取得各标签的值,然后再设置a标签的href,这个问题就解决了。

现在回想起来这些问题真的挺简单的,但刚做的时候真的是耗费了不少时间,尤其是自己在学校中从来没接触过这些,不过做出来看到自己的代码实现了各种功能真的还是挺开心的!需要学习的地方太多了,要不断学习,不断进步!

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 张琪格草小孩完整视频12分03秒视频在线播放 xoxo是什么意思 中国jijizzxx jepameaexxx 三岁小孩给他妈口 48岁潮视频 48岁的吹嘲视频 48岁潮次在线看 女主动让男捅的完整视频繁星 男生脱掉裤衩后图片100张 怎么正确的舔 美女喷液视频免费观看 幼儿第八十页 a狼论坛新人注册 ww9885jc0m 狼论坛聚集地 www.qqbk87 www.seso88.com观看 5177.tv www.5177tv .com 夜恋影院电影全部视频列表2 5177tv浮力院路线最新 www.maomi35.com 王者荣耀扫一扫领皮肤 八x8x皇冠影院 amp;lt;女性自www94677com 条形码发明人去世from wm783941 www.3344xexe 佐佐木明希母乳满天飞在线看 56qao欧美大片光棍 qz1.app茄子视频 yt9.tv爱樱桃官网入口 淫母风车动漫在线观看 卡漫动漫第48页 色母动漫全集日语2集 [熟肉][A] 色母动漫1一6全集 纺付漫1-6中文字幕 秋空12集未删减版樱花动漫 浮母3 权色官途免费阅读