44、excel和zip导出封装

139 阅读1分钟

1、get方式导出

/**
     * @method saveFile() 导出
     * @param {base64} data 导出的数据,待转
     * @param {String} fileName 名称
     * @param type 保存的文件类型,目前只有excel和zip
     */
    saveFile(data, fileName, type = 'excel') {
        const ZIP = 'application/zip;charset=utf-8'
        const EXCEL = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
        let terminalType = ''
        if (type === 'excel') {
            terminalType = EXCEL
        } else if (type === 'zip') {
            terminalType = ZIP
        }
        var blob = ''
        if(typeof(data) === 'string') {
            let code = atob(data.replace(/\r\n/g, ''))
            var abuffer = new window.ArrayBuffer(code.length)
            var uBuffer = new window.Uint8Array(abuffer)
            for (var i = 0; i < code.length; i++) {
                uBuffer[i] = code.charCodeAt(i) & 0xff
            }
            blob = new Blob([uBuffer], {
                type: terminalType
            })
        }else {
            blob = new Blob([data], {
                type: terminalType
            })
        }
        if (window.navigator.msSaveOrOpenBlob) {
            // iE下使用msSaveBlob进行导出
            navigator.msSaveBlob(blob, fileName)
        } else {
            var href = window.URL.createObjectURL(blob)
            var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a')
            save_link.href = href
            save_link.download = fileName
            // 解决火狐兼容问题
            document.body.appendChild(save_link)
            var event = document.createEvent('MouseEvents')
            event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
            save_link.dispatchEvent(event)
            document.body.removeChild(save_link)
            window.URL.revokeObjectURL(href)
        }
    },

2、使用

// 导出 
export function historyExport (that, {channelId, signalCode, startTime, endTime,status,measuredValStart,measuredValEnd,sortType,sort}) {
  return new Promise((resolve, reject) => {
    that.resetAjax({
      method: 'GET',
      url: `evo-pmms/history/dataList/export/channelId=${channelId}&signalCode=${signalCode}&startTime=${startTime}&endTime=${endTime}`,
      isNoLocktrue,
      isENoTiptrue,
      isSNoTiptrue,
      isParseHtml: true,
      responseType: 'blob',
      data: {params: {channelId, signalCode, startTime, endTime,status,measuredValStart,measuredValEnd,sortType,sort}},
      onSuccess(res) {
        resolve(res)
      },
      onError(res) {
        reject(res)
      }
    })
  })
}


         historyExport(this, params).then(res => {
          }).catch(res => {
          //res.data  流文件
            utils.saveFile(res.data, '历史查询.xlsx');
          });

2、post方式导出excel

/**
     * @method downloadFile() post方式导出excel
     * @param {String} url 接口
     * @param {Json} data 数据
     */
    downloadFile(url, data) {
        const body = document.getElementsByTagName('body')[0]
        const form = document.createElement('form')
        form.method = 'POST'
        form.action = window.location.origin + '/' + url
        form.style.display = 'none'
        for (var key in data) {
            var param = document.createElement('input')
            param.type = "hidden"
            param.name = key
            param.value = data[key]
            form.appendChild(param)
        }
        body.appendChild(form)
        form.submit()
        body.removeChild(form)
    },

3、333

//流的方式下载文件
            download(data) {
                let typeName = this.params.name
                typeName = typeName + moment().format("YYYY-MM-DD HH-mm-ss")
                let name = data.headers["content-disposition"]
                if (name.indexOf('.xls') > -1) {
                    if (name.indexOf('.xlsx') > -1) {
                        name = typeName + '.xlsx'
                    } else {
                        name = typeName + '.xls'
                    }
                } else if (name.indexOf('.zip') > -1) {
                    name = typeName + '.zip'
                }
                let blob = new Blob([data.data], {
                    // type: fileType //可去
                })
                if (window.navigator.msSaveOrOpenBlob) {
                    window.navigator.msSaveBlob(blob, name);
                } else {
                    const a = window.document.createElement('a');
                    a.href = window.URL.createObjectURL(blob, { type: 'text/plain' });
                    a.download = name;
                    document.body.appendChild(a);
                    a.click();
                    document.body.removeChild(a);
                }
            },