ITPub博客

首页 > 应用开发 > IT综合 > 使用JavaScript把页面上的表格导出为Excel文件

使用JavaScript把页面上的表格导出为Excel文件

IT综合 作者:hljhrbsjf 时间:2017-11-28 14:21:22 0 删除 编辑

如果在页面上展示了一个数据表格,而用户想把这个表格导出为Excel文件,那么在要求不高的情况下,可以不通过服务器生成表格,而是直接利用JavaScript的Blob和Object URL特性将表格导出。不过,丑话说在前头,这篇随笔中利用了Excel能打开HTML文档的特性,所以导出的表格实际上是一个HTML文档,并且其扩展名只能为.xls,而不能是.xlsx,否则Excel无法打开。(不过确实见过使用JavaScript生成真正Excel文件的方案,这里暂不提及。)

实现代码如下,包含HTML页面和JavaScript脚本


点击(此处)折叠或打开

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.     <title></title>
  6.     <meta charset="utf-8" />
  7.     <style>
  8.         /* 此样式仅用于浏览器页面效果,Excel不会分离表格边框,不需要此样式 */
  9.         table {
  10.             border-collapse: collapse;
  11.         }
  12.     </style>
  13. </head>
  14. <body>
  15.     <!-- 设置border="1"以显示表格框线 -->
  16.     <table border="1">
  17.         <!-- caption元素可以生成表标题,其单元格列跨度为表格的列数 -->
  18.         <caption>学生成绩表</caption>
  19.         <tr>
  20.             <!-- 可以使用rowspan和colspan来合并单元格 -->
  21.             <th rowspan="2">编号</th>
  22.             <th rowspan="2">学号</th>
  23.             <th rowspan="2">姓名</th>
  24.             <th rowspan="2">性别</th>
  25.             <th rowspan="2">年龄</th>
  26.             <th colspan="3">成绩</th>
  27.         </tr>
  28.         <tr>
  29.             <th>语文</th>
  30.             <th>数学</th>
  31.             <th>英语</th>
  32.         </tr>
  33.         <tr>
  34.             <td>1</td>
  35.             <td>2016001</td>
  36.             <td>张三</td>
  37.             <td></td>
  38.             <td>13</td>
  39.             <td>85</td>
  40.             <td>94</td>
  41.             <td>77</td>
  42.         </tr>
  43.         <tr>
  44.             <td>2</td>
  45.             <td>2016002</td>
  46.             <td>李四</td>
  47.             <td></td>
  48.             <td>12</td>
  49.             <td>96</td>
  50.             <td>84</td>
  51.             <td>89</td>
  52.         </tr>
  53.     </table>

  54.     <a>导出表格</a>

  55.     <script>
  56.         // 使用outerHTML属性获取整个table元素的HTML代码(包括<table>标签),然后包装成一个完整的HTML文档,设置charset为urf-8以防止中文乱码
  57.         var html = "<html><head><meta charset='utf-8' /></head><body>" + document.getElementsByTagName("table")[0].outerHTML + "</body></html>";
  58.         // 实例化一个Blob对象,其构造函数的第一个参数是包含文件内容的数组,第二个参数是包含文件类型属性的对象
  59.         var blob = new Blob([html], { type: "application/vnd.ms-excel" });
  60.         var a = document.getElementsByTagName("a")[0];
  61.         // 利用URL.createObjectURL()方法为a元素生成blob URL
  62.         a.href = URL.createObjectURL(blob);
  63.         // 设置文件名,目前只有Chrome和FireFox支持此属性
  64.         a.download = "学生成绩表.xls";
  65.     </script>
  66. </body>
  67. </html>
效果如图:


	

打开下载的文件:

使用开发者工具检查a元素,就能大致明白blob URL的工作原理:

<a href="blob:http://localhost:52347/0ead79dc-1896-4a53-b1f1-dfbafff4e953" download="学生成绩表.xls">导出表格<!--a>

如果想通过按钮导出文件,可以在按钮的点击事件中创建a元素,配置其属性并触发其点击事件。不过在FireFox中,需要先将创建的a元素放入body中,否则无法下载。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/631872/viewspace-2147860/,如需转载,请注明出处,否则将追究法律责任。

上一篇: IIS与TOMCAT整合
下一篇: 没有了~
请登录后发表评论 登录
全部评论
  • 博文量
    115
  • 访问量
    527045