zoukankan      html  css  js  c++  java
  • 优化:vue纯前端导出excel表格

    一、安装依赖

      npm install xlsx --save

    二、引入依赖

      import XLSX from 'xlsx'

    三、构造导出数据

      exportExcel(){

        const tHeader = ['姓名','性别','地址','手机号’];

        const filterVal = ['name','sex','address','phone'];

        //列宽

        const cols = [{wpx:60},{wpx:60},{wpx:100},{wpx:60}];

        const data =this.formatJson(filterVal,this.exportData);//this.exportData是需要导出的json数据

        this.export_json_to_excel(tHeader,data,"个人信息表",cols);

      },

      formatJson ( filterVal,jsonData){

        return jsonData.map(v => filterVal.map( j => v [ j ] ));

      },

    四、构造Excel

      export_json_to_excel(tHeader,data,defaultTitle,cols){

        data.unshift ( tHeader );

        let ws_name = "Sheet1";

        let wb = XLSX.utils.book_new();

        let ws = XLSX.utils.aoa_to_sheet(data);

        if(cols.lengths>0){

          ws['!cols'] = cols;  //设置列宽

        }

        wb.SheetNames.push(ws_name);

        wb.Sheets[ws_name] = ws;

        let result = XLSX.write(wb,{bookType:'xlsx',bookSST:false,type:'binary'});

        let title = defaultTitle || '列表';

        this.openDownloadDialog(new Blob(this.s2ab(result)],{type:"application/octet-stream"}),title+".xlsx");

      },

    五、下载Excel

      openDownloadDialog(url, saveName){
        if(typeof url == 'object' && url instanceof Blob){
          url = URL.createObjectURL(url); // 创建blob地址
        }
        var aLink = document.createElement('a');
        aLink.href = url;
        aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
        var event;
        if(window.MouseEvent) {

          event = new MouseEvent('click');

        }else{
          event = document.createEvent('MouseEvents');
          event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        }
        aLink.dispatchEvent(event);
      },

       s2ab(s) {
        var buf = new ArrayBuffer(s.length);
        var view = new Uint8Array(buf);
        for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
        return buf;
      }

      

  • 相关阅读:
    vue 实例化定义路由模板
    MUI区域滚动,软键盘挡住input
    javaScript使用navigator.userAgent.toLowerCase()判断移动端类型
    vue-cli启动本地服务,局域网下通过ip访问不到的原因
    vue 实例化定义路由
    如何在同一个Excel里,对两个很相似的工作簿比对出不同之处
    常见贴片电容电阻封装及功率
    集成运放输入电压范围指标参数Uicmax,Uidmax
    复合管等效管
    urlparse模块
  • 原文地址:https://www.cnblogs.com/sanshao-ghf/p/11612566.html
Copyright © 2011-2022 走看看