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渐显(fadeIn)渐隐(fadeOut)类
Jun 19 Javascript
一个背景云变换js特效 鼠标移动背景云变化
Dec 28 Javascript
Js 时间函数getYear()的使用问题探讨
Apr 01 Javascript
分享20个提升网站界面体验的jQuery插件
Dec 15 Javascript
jquery使用animate方法实现控制元素移动
Mar 27 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
Apr 25 Javascript
详解React之父子组件传递和其它一些要点
Jun 25 Javascript
vue-router 源码实现前端路由的两种方式
Jul 02 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 Javascript
Vue实现点击按钮复制文本内容的例子
Nov 09 Javascript
在Vue中创建可重用的 Transition的方法
Jun 02 Javascript
Vue 组件的挂载与父子组件的传值实例
Sep 02 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
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
php插入排序法实现数组排序实例
2015/02/16 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
js 数组操作代码集锦
2009/04/28 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
解决option标签selected=&quot;selected&quot;属性失效的问题
2017/11/06 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
Python实现定时任务
2017/02/08 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
自我鉴定范文300字
2013/10/01 职场文书
安全检查管理制度
2014/02/02 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis