前端导出excel文件兼容IE,Chrome

前端导出excel文件兼容IE,Chrome

导出文件,使用最多的方式还是服务器端来处理,但是有时候需要web端来导出一个表格,
思路
1.导出文件的格式data:text/csv;charset=utf-8,IE上加上BOM头\ufeff 防止乱码
2.表格数据以,分列 \n分行
3.使用encodeURI转换成可以识别的url,IE上加上decodeURIComponent转换这个url
话不多说直接上代码

//导出csv文件
export const exportExcel = data => {
  var csvContent = "data:text/csv;charset=utf-8,";
  if (window.navigator.msSaveOrOpenBlob) {
    // 加上 \ufeff BOM 头,防止乱码
    csvContent = "\ufeff";
  }
  //csv 文件可以用Excel打开, 如果是导出一个table 的话,使用Excel 就方便很多了
  data.forEach(function(infoArray, index) {
    var dataString = infoArray.join(",");
    //分列使用 , 号分割, 分行用 \n
    csvContent += index < data.length ? dataString + "\n" : dataString;
  });
  exportFun(csvContent);
};
const exportFun = csvContent => {
  if (window.navigator.msSaveOrOpenBlob) {
    // IE 浏览器  \n.使用后会发现列可以分开,但是不换行。 看上去不认识 使用decodeURIComponent 进行编码
    var blob = new window.Blob([decodeURIComponent(encodeURI(csvContent))], {
      type: "text/csv;charset=utf-8;"
    });
    //Internet Explorer 10 的 msSaveBlob 和 msSaveOrOpenBlob 方法允许用户在客户端上保存文件,名字随便起
    navigator.msSaveBlob(blob, "download.csv");
  } else {
    //非IE浏览器直接使用a标签download下载
    var encodedUri = encodeURI(csvContent);
    var link = document.createElement("a");
    link.setAttribute("href", encodedUri);
    link.setAttribute("download", "download.csv");
    document.body.appendChild(link);
    link.click();
  }
};
 //造数据
 exportExcel() {
     //表头
     let theadData = [["抓拍图片", "时间", "设备名称"]],
     //表格内容,列数必须和表偷数据一致
     for (var v of this.snpaShotData_notype) {
       const img =v.SubImageList[0].StoragePath
       const time = v.FaceAppearTime ||  "";
       const name = v.ApeName || "";
       var arr = [img, time, name];
       theadData.push(arr);
     }
     //最终的数据应该是二维数组,数组中每个元素代表每一行
     exportExcel(theadData);
   },
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值