zoukankan      html  css  js  c++  java
  • vue 前后端下载

    1.使用场景:前后端分离,后端生成execl六文件,前端直接调用接口下载excel

    /src/api/usr
    export function exportExcel(path,params) {
      return request({
        url: path,
        method:'get',
        params:params,
        responseType: 'arraybuffer'
      })
    }
    
    
    //使用的地方
    async handleDown () {
          this.downLoading = true
          try{
            const res = await exportExcel('/service/reconciliation/downloadList',this.listQuery)
            const blob = new Blob([res],{
              type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
            })
            let downloadElement = document.createElement('a')
            let href = window.URL.createObjectURL(blob)
            downloadElement.href = href
            downloadElement.download = '账单明细.xlsx'
            document.body.appendChild(downloadElement)
            downloadElement.click()
            document.body.removeChild(downloadElement)
            window.URL.revokeObjectURL(href)
            setTimeout(() => {
              this.downLoading = false
            }, 500)
          }catch(err){
            this.downLoading = false
          }
        },
    
    

    2.execl直接在前端生成,样式可以根据实际内容调整,本质是一个html,转换成execl

    优点:样式可以随意切换,在前端直接生成减少网络传输压力

    缺点:用word打开的时候会有一个提示,文档格式不匹配,但不影响正常的打开

        exportxsl() {
          var datanum = this.exceldata.length - 1;
          // var startTime = this.timestampToTime(this.exceldata[0].createTime);
          // var endTime = this.timestampToTime(this.exceldata[datanum].createTime);
          var str =
            "<tr style='font-size:15px'><td colspan='6'  style='font-size:14px;background-color:#ddd;padding-top:10px;padding-bottom:10px;height:100px'> <strong>提示:</strong>      总数:" +
            this.exceldata.length +
            "条</td></tr>" +
            '<tr>'+
            '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">账号</td>' +
            '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">产品</td>' +
            '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">单价</td>' +
            '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">实际费用</td>' +
            '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">类型</td>' +
            '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">订购时间</td>' +
            ' </tr>';
          var data = this.exceldata; //从接口中获取的数据
          for (let i = 0; i < data.length; i++) {
            let account =  data[i].account ? data[i].account:"--"
            str += "<tr>";
            str +=
              '<td  style="border: 0.5pt solid #000;">' + account + "</td>";
            str +=
              '<td  style="border: 0.5pt solid #000;">' +
              data[i].productName +
              "</td>";
            str +=
              '<td  style="border: 0.5pt solid #000;">' +
              data[i].receivable +
              "</td>";
            str +=
              '<td  style="border: 0.5pt solid #000;">' +
              data[i].receipt +
              "</td>";
            str +=
              '<td  style="border: 0.5pt solid #000;">' +
              this.typeToChange(data[i].type) +
              "</td>";
            str +=
              '<td  style="border: 0.5pt solid #000;">' +
              this.timestampToTime(data[i].createTime) +
              "</td>";
            str += "</tr>";
          }
          function base64(template) {
            return window.btoa(unescape(encodeURIComponent(template)));
          }
          var filename = "个人账单信息";
          //Worksheet名
          var worksheet = "个人帐单信息";
          // let uri = 'data:text/csv;charset=utf-8,ufeff' + encodeURIComponent(str);
    
          var uri = "data:application/vnd.ms-excel;base64,";
          //下载的表格模板数据
          var 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]--><style type="text/css">table{border: 0.5pt solid #000;background-cpor:#dddborder-collapse: collapse;}table td{border-top:0pt;font-size:16px } </style>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><table>${str}</table></body></html>`;
    
          var a = document.createElement("a");
          a.download = filename;
          a.href = uri + base64(template);
          a.click();
          // // 下载模板
          // window.location.href = uri + base64(template)
        }
    

    3.还有一种使用官方的插件的execl 在前端生成,vue-element-admin 上有  我就不再重复叙述了。  

      

  • 相关阅读:
    android之自定义ViewGroup和自动换行的布局的实现
    早上开发有感:事情原本可以变的简单
    android中textview显示汉字,字母,数字乱行行问题解决
    MeasureSpec介绍及使用详解
    android中status bar 小结
    Android推送方式比较(转)
    error: Entry 'xxxxxx' not uptodate. Cannot merge.
    android2.3:加载你的SD卡与can't mount /dev/block/mmcblk0
    有客户自远方来,不亦乐乎?唉,怎一个愁字了得
    卸载Norton 8企业版的一次经历
  • 原文地址:https://www.cnblogs.com/moon-yyl/p/14975899.html
Copyright © 2011-2022 走看看