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 相关文章推荐
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
Dec 28 Javascript
jquery parent和parents的区别分析
Oct 02 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
Jan 12 Javascript
浅谈javascript中自定义模版
Jan 29 Javascript
jQuery获得document和window对象宽度和高度的方法
Mar 25 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
May 26 Javascript
深入浅出 jQuery中的事件机制
Aug 23 Javascript
ReactNative Image组件使用详解
Aug 07 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
Nov 21 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
Jun 24 Javascript
简单了解Vue computed属性及watch区别
Jul 10 Javascript
JavaScript代码实现简单计算器
Dec 27 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
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
ThinkPHP的URL重写问题
2014/06/22 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
Python设计模式之代理模式实例
2014/04/26 Python
python搜索指定目录的方法
2015/04/29 Python
python虚拟环境virualenv的安装与使用
2016/12/18 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
实例讲解Python爬取网页数据
2018/07/08 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
进程的查看和调度分别使用什么命令
2015/03/25 面试题
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
自我鉴定思想方面
2013/10/07 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
php访问对象中的成员的实例方法
2021/11/17 PHP