首页 > 其他 > 详细

适用于iview的表格转Excel插件

时间:2017-12-28 14:58:57      阅读:344      评论:0      收藏:0      [点我收藏+]

在网上找的一个表格转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插件

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!