码迷,mamicode.com
首页 > 其他好文 > 详细

适用于iview的表格转Excel插件

时间:2017-12-28 15:01:46      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:change   tab   blog   false   pos   etop   top   let   component   

在网上找的一个表格转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);
}

 

适用于iview的表格转Excel插件

标签:change   tab   blog   false   pos   etop   top   let   component   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!