前端实现Excel文档导出到本地

112 阅读1分钟

1. 利用Axios向服务器请求文档流

function download(url, methods, params = {}, params1 = {}) {
    return new Promise((resolve, reject) => {
        url = apiUrl + url;
        Axios({
            url: url,
            method: methods,
            data: params,
            params: params1,
            responseType: 'arraybuffer'
        }).then((response) => {
            resolve(response)
        }).catch(function (error) {
            reject(error)
        })
    })
}

2. 处理向服务器请求下来的文档流

function excelDownload(obj, name = Date.now()) {//Date.now()获取当前日期
  const url = window.URL.createObjectURL(
    //Blob是二进制大对象
    new Blob([obj], { type: 'application/vnd.ms-excel' })
  );
  const aDOM = document.createElement('a');
  aDOM.style.display = 'none'; //设置dom元素不显示,隐藏
  aDOM.href = url;
  aDOM.setAttribute('download', decodeURI(name)); //setAttribute(name, value)增加一个指定名称和值的新属性,或者把一个现有属性设定为指定的值
  document.body.appendChild(aDOM); //向body节点中添加dom节点
  aDOM.click()//在adom上模拟一次鼠标点击
  document.body.removeChild(aDOM); //移除节点
  window.URL.revokeObjectURL(url);
}