适用于iview的表格转Excel插件

在网上找的一个表格转excel插件,经过修改后使其适用于iview中的table组件

let idTmr;
const getExplorer = () => {
  let 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‘;
  }
};

const method = (ref) => {

  //整个表格拷贝到EXCEL中
  if (getExplorer() == ‘ie‘) {
    let curTbl = ref;
    let oXL = new ActiveXObject("Excel.Application");

    //创建AX对象excel
    let oWB = oXL.Workbooks.Add();
    //获取workbook对象
    let xlsheet = oWB.Worksheets(1);
    //激活当前sheet
    let sel = document.body.createTextRange();
    sel.moveToElementText(curTbl);
    //把表格中的内容移到TextRange中
    sel.select;
    //全选TextRange中内容
    sel.execCommand("Copy");
    //复制TextRange中内容
    xlsheet.Paste();
    //粘贴到活动的EXCEL中
    oXL.Visible = true;
    //设置excel可见属性

    try {
      let 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);
      //xls.visible = false;
      oXL.Quit();
      oXL = null;
      // 结束excel进程,退出完成
      window.setInterval("Cleanup();", 1);
      idTmr = window.setInterval("Cleanup();", 1);

    }

  } else {
    tableToExcel(ref)
  }
};

const Cleanup = () => {
  window.clearInterval(idTmr);
};

const tableToExcel = (function () {
  let uri = ‘data:application/vnd.ms-excel;base64,‘,
    template = ‘<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"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>‘,
    base64 = function (s) {
      return window.btoa(unescape(encodeURIComponent(s)));
    },
    format = (s, c) => {
      return s.replace(/{(\w+)}/g,
        (m, p) => {
          return c[p];
        })
    };
  return (table, name) => {
    let ctx = {
      worksheet: name || ‘Worksheet‘,
      table
    };
    window.location.href = uri + base64(format(template, ctx))
  }
})();

export default (theadData, tbodyData, name = ‘Worksheet‘) => {
  // 写入key过滤不显示的td
  let thArr = [];
  // 建立节点
  let table = document.createElement(‘table‘);
  let thead = document.createElement(‘thead‘);
  let tbody = document.createElement(‘tbody‘);
  //  建立thead中的tr
  let thTr = document.createElement(‘tr‘);
  //  遍历写入th表头
  for (let i of theadData) {
    thArr.push(i.key);
    let th = document.createElement(‘th‘);
    let text = document.createTextNode(i.title);
    th.appendChild(text);
    thTr.appendChild(th);
  }
  thead.appendChild(thTr);
  //  遍历写入td
  for (let i of tbodyData) {
    let tr = document.createElement(‘tr‘);
    for (let j in i) {
      //  筛选写入
      for (let k of thArr) {
        if (k == j) {
          let td = document.createElement(‘td‘);
          let text = document.createTextNode(i[j]);
          td.appendChild(text);
          tr.appendChild(td);
        }
      }
    }
    tbody.appendChild(tr);
  }
  table.appendChild(thead);
  table.appendChild(tbody);
  method(table.innerHTML, name);
}

原文地址:https://www.cnblogs.com/lvyueyang/p/8135636.html

时间: 2024-10-07 20:44:20

适用于iview的表格转Excel插件的相关文章

vue+iview中的table表格导出excel表格

一.iveiw框架中table中有exportCsv()方法可以导出.csv后缀文件,类似于excel文件,但是并不是excel文件. 二.实现table表格导出excel文件利用Blob.js 和 Export2Excel.js两个文件实现 1.Blob.js 和 Export2Excel.js文件 链接:https://pan.baidu.com/s/1PvP-NxmONNh71SRDvlL_9A 密码:3h82 2.把Blob.js 和 Export2Excel.js文件添加到src文件夹

导出Excel插件——Export-CSV ---20150610

出处:http://bbs.hcharts.cn/thread-99-1-1.html 导出Excel插件——Export-CSV 一.插件信息 插件名:Export-CSV(导出Execl文件) 插件地址:https://rawgithub.com/highslide-software/export-csv/master/export-csv.js 插件使用:在页面引入export-csv.js即可,详见在线演示平台<导出Excel表格> 二.原理解析通过分析源码,其原理是遍历Highcha

jQuery 表格隔行变色插件

jQuery提供了用于扩展jQuery功能的方法,即jQuery.fn.extend()方法和jQuery.extend()方法. 基本的JS框架代码如下: 1 ;(function($) { 2 $.fn.extend({ 3 //这里写插件代码 4 }); 5 })(jQuery); 例子:编写一个表格隔行变色插件 JS代码 1. 插件编写 1 //插件编写 2 ;(function($) { 3 $.fn.extend({ 4 "alterBgColor":function(op

ExtJS4.2学习(13)基于表格的扩展插件---rowEditing

鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-24/182.html -------------------------------------------------------------------------------------------- 前一章说了EditorGrid可编辑表格,但是有点不方便,如果数据多的话,一次性保存未免有点不太方便.下面我们来说一个扩展插件rowEditin

用VBA计算WPS 表格ET EXCEL中的行数和列数的多重方法

用VBA计算WPS 表格ET EXCEL中的行数和列数 每种方法中上面的是Excel的行数,下面的是Excel的列数. 方法1: ActiveSheet.UsedRange.Rows.Count ActiveSheet.UsedRange.Columns.Count 缺点:有时可能会比实际数大一些,原因是如果你把最后几行(列)数据清除后(非整行或整列删除), 用这个命令仍返回未清除前的值.就是说现在虽然是空的,但是你曾经用过也算你的. 方法2: ActiveSheet.Range("A65535

C#语言将 mysql数据库表格导入excel的函数

private void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName) { if (tmpDataTable == null) { return; } int rowNum = tmpDataTable.Rows.Count;//行 int columnNum = tmpDataTable.Columns.Count;//列 int rowIndex = 1;//行 int columnIndex

Excel插件类库的设计思路

一.插件功能:提供多种读取Excel的方式,如NPOI.Com.Aspose,调用接口一致,包括Excel文件路径,sheet名称.读取是否包含列头(即Excel第一行是否为列头行) 二.实现思路 2.1 定义一个接口,该接口提供一个读取Excel的公共方法 public interface IExcelReader { /// <summary> /// 从excel的datesheet读出数据到DataTable /// </summary> /// <param nam

PDF表格到Excel格式的转换系统-RainbowPDF2.0

证券公司处理上市公司PDF会计报表的有力工具 高精度将PDF表格到Excel格式的转换系统 解决证券公司统计上市公司的会计报表时,PDF报表的数据输入问题! 目前上市公司的会计报表全部以PDF格式上报到交易所,并且为了安全,实施了加密.禁止修改.禁止打印.禁止文字抽取等各种保护措施,给证券公司带来了很大困难,统计上市公司的数据只好重新把数据用手工方式输入一遍. 北京红樱枫软件有限公司的RainbowPDF软件解决了您的大麻烦,利用它可以毫不费劲的把PDF中的表格数据自动转换到Excel中.而且表

个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第12波-快速生成、读取、导出条形码二维码

根据指定的内容生成对应的条形码或二维码,在如今移动互联网时代,并不是一件什么新鲜事,随便百度一下,都能找到好多的软件或在线网站可以帮我们做到,但细想一下,如果很偶然地只是生成一个两这样的图形,百度一下找个在线网站生成一下下载到本地,再复制粘贴一下,并不是什么多大问题的事情,但如果要批量处理,又如何呢?如果生成的二维码条形码,先进行排版一下打印出来,类似一个个标签或用作相应的产品说明的一部分,那又是怎样一种现成的解决方案呢?本次Excel催化剂再次刷新大家对Excel的认识,所有大家想做的事情,全