js前端导出Excel的方法


Posted in Javascript onNovember 01, 2017

需求:

要求把项目中的table表格导出Excel

需求分析及解决:

既然需要导出,是报表的可能性比较大,我的项目中就是这样,那既然是报表导出,可以是前端导出,也可以是后端导出(技术包括POI或者报表工具等),这篇文章主
要是网上找的前端导出,既然是前端导出又是报表就需要有数据,所以数据都需要你提前做好相应填充

代码:

<!DOCTYPE html> 
<html> 
<head lang="en"> 
 <meta charset="UTF-8"> 
 <title>html 表格导出</title> 
 <script language="JavaScript" type="text/javascript"> 
  
  
  var idTmr; 
 //获取当前浏览器类型 
  function getExplorer() { 
   var explorer = window.navigator.userAgent ; 
   //ie 
   if (explorer.indexOf("MSIE") >= 0) { 
    return 'ie'; 
   } 
   //firefox 
   else if (explorer.indexOf("Firefox") >= 0) { 
    return 'Firefox'; 
   } 
   //Chrome 
   else if(explorer.indexOf("Chrome") >= 0){ 
    return 'Chrome'; 
   } 
   //Opera 
   else if(explorer.indexOf("Opera") >= 0){ 
    return 'Opera'; 
   } 
   //Safari 
   else if(explorer.indexOf("Safari") >= 0){ 
    return 'Safari'; 
   } 
  } 
   
 //获取到类型需要判断当前浏览器需要调用的方法,目前项目中火狐,谷歌,360没有问题 
  //win10自带的IE无法导出 
  function exportExcel(tableid) { 
   if(getExplorer()=='ie') 
   { 
    var curTbl = document.getElementById(tableid); 
    var oXL = new ActiveXObject("Excel.Application"); 
    var oWB = oXL.Workbooks.Add(); 
    var xlsheet = oWB.Worksheets(1); 
    var sel = document.body.createTextRange(); 
    sel.moveToElementText(curTbl); 
    sel.select(); 
    sel.execCommand("Copy"); 
    xlsheet.Paste(); 
    oXL.Visible = true; 
 
    try { 
     var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls"); 
    } catch (e) { 
     print("Nested catch caught " + e); 
    } finally { 
     oWB.SaveAs(fname); 
     oWB.Close(savechanges = false); 
     oXL.Quit(); 
     oXL = null; 
     idTmr = window.setInterval("Cleanup();", 1); 
    } 
 
   } 
   else 
   { 
    tableToExcel(tableid) 
   } 
  } 
  function Cleanup() { 
   window.clearInterval(idTmr); 
   CollectGarbage(); 
  } 
   
 //判断浏览器后调用的方法,把table的id传入即可 
  var tableToExcel = (function() { 
   var uri = 'data:application/vnd.ms-excel;base64,', 
     template = '<html><head><meta charset="UTF-8"></head><body><table>{table}</table></body></html>', 
     base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }, 
     format = function(s, c) { 
      return s.replace(/{(\w+)}/g, 
        function(m, p) { return c[p]; }) } 
   return function(table, name) { 
    if (!table.nodeType) table = document.getElementById(table) 
    var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML} 
    window.location.href = uri + base64(format(template, ctx)) 
   } 
  })() 
 
 </script> 
</head> 
<body> 
 
<div > 
  
 <button type="button" onclick="exportExcel('tableExcel')">导出Excel</button> 
</div> 
<div id="myDiv"> 
<table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0"> 
 <tr> 
  <td colspan="5" align="center">html 表格导出道Excel</td> 
 </tr> 
 <tr> 
   
  <td>列标题</td> 
 </tr> 
 <tr> 
  <td>aaa</td> 
  <td>bbb</td> 
  <td>ccc</td> 
  <td>ddd</td> 
  <td>eee</td> 
 </tr> 
 <tr> 
  <td>AAA</td> 
  <td>BBB</td> 
  <td>CCC</td> 
  <td>DDD</td> 
  <td>EEE</td> 
 </tr> 
 <tr> 
  <td>FFF</td> 
  <td>GGG</td> 
  <td>HHH</td> 
  <td>III</td> 
  <td>JJJ</td> 
 </tr> 
</table> 
</div> 
</body> 
</html>

 重点:

把此代码复制到记事本,命名为.html文件,用浏览器打开即可查看是否可以导出,如果可以导入项目中,把数据填充即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 注意事项 与原因分析
Apr 24 Javascript
Fixie.js 自动填充内容的插件
Jun 28 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
Dec 16 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
Feb 08 Javascript
js图片延迟技术一般的思路与示例
Mar 20 Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 Javascript
jquery插件NProgress.js制作网页加载进度条
Jun 05 Javascript
浅析$.getJSON异步请求和同步请求
Jun 06 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
May 01 jQuery
使用Dropzone.js上传的示例代码
Oct 10 Javascript
vue-cli 如何打包上线的方法示例
May 08 Javascript
代码实例ajax实现点击加载更多数据图片
Oct 12 Javascript
JS二分查找算法详解
Nov 01 #Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 #Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
Nov 01 #Javascript
bootstrap Table的一些小操作
Nov 01 #Javascript
react-native fetch的具体使用方法
Nov 01 #Javascript
Vue异步加载about组件
Oct 31 #Javascript
微信小程序顶部可滚动导航效果
Oct 31 #Javascript
You might like
自动分页的不完整解决方案
2007/01/12 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
分享3个php获取日历的函数
2015/09/25 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
js脚本实现数据去重
2014/11/27 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
2020/02/23 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
js+canvas实现五子棋小游戏
2020/08/02 Javascript
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
python numpy存取文件的方式
2020/04/01 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
Python和Bash结合在一起的方法
2020/11/13 Python
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
大学生求职自荐信
2013/12/12 职场文书
大学新生军训自我鉴定
2014/03/18 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
运动会广播稿300字
2015/08/19 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书