前端下载的EXCEL文件无法打开的解决办法

发布于:2025-08-01 ⋅ 阅读:(21) ⋅ 点赞:(0)

前端下载的EXCEL文件无法打开的解决办法

根据工作需要,要下载一个excel文件模板,但下载的文件报错,打不开,如下:
在这里插入图片描述
检查了下载的代码,均没问题,出现这个问题的主要原因原来是需要在接口中加一个responseType,类型要为blob,这个非常重要,必须要,因为我这儿是封装好的接口,所以我直接在这里加上这句就可以,代码如下:

在这里插入图片描述
下载方法封装:

 //普通下载
  /**
   * @description 接收数据流生成 blob,创建链接,下载文件
   * @param {Function} api 导出表格的接口 (必传)
   *  @param {Object} params 导出的参数 (默认{})
   * @param {String} filename 导出的文件名 (必传)
   * @param {Boolean} isNotify 是否有导出消息提示 (默认为 true)
   * @param {String} fileType 导出的文件格式 (默认为.xlsx)
   * */
  const downloadFile = async (
    api,
    filename,
    fileType: string = '.xlsx',
    params: any = {},
    isNotify: boolean = false,
  ) => {
    if (isNotify) {
      ElNotification({
        title: '温馨提示',
        message: '如果数据庞大会导致下载缓慢哦,请您耐心等待!',
        type: 'info',
        duration: 3000,
      });
    }
    const res = await api(params);
    const blob = new Blob([res]);
    saveAs(blob, filename, fileType);
  };

const saveAs = (blob, filename, fileType) => {
    const link = document.createElement('a');
    const body = document.querySelector('body');
    link.href = window.URL.createObjectURL(blob);
    link.download = fileType ? `${filename}${fileType}` : `${filename}`;
    link.style.display = 'none';
    body.appendChild(link);
    link.click();
    body.removeChild(link);
    window.URL.revokeObjectURL(link.href);
  };