vue3+TypeScript实现导出Excel功能

一、效果展示

我们通过两个按钮来实现导入导出功能、具体模板的样式如下 具体样式,请参考上篇博客

二、模板下载

<el-button
        class="excel-btn"
        size="small"
        type="primary"
        icon="download"
        @click="downloadTemplate(导入用户模板文件.xlsx)">
        点击下载
    </el-button>
//接口文件
export const downloadTemplate = fileName =>{
          
   
	return service({
          
   
    url: XXXX,
    method: post,
    params: {
          
   
      fileName: fileName,
    },
    responseType: blob,
  }).then(res => {
          
   
    handleFileError(res, fileName);
  });
}

const handleFileError = (res, fileName) => {
          
   
  if (typeof res.data !== undefined) {
          
   
    if (res.data.type === application/json) {
          
   
      const reader = new FileReader();
      reader.onload = function () {
          
   
        const message = JSON.parse(reader.result).msg;
        ElMessage({
          
   
          showClose: true,
          message: message,
          type: error,
        });
      };
      reader.readAsText(new Blob([res.data]));
    }
  } else {
          
   
    var downloadUrl = window.URL.createObjectURL(new Blob([res]));
    var a = document.createElement(a);
    a.style.display = none;
    a.href = downloadUrl;
    a.download = fileName;
    var event = new MouseEvent(click);
    a.dispatchEvent(event);
  }
};

以上就是下载模板的功能实现

导出文件

<el-button
            class="excel-btn"
            size="small"
            icon="download"
            @click="handleExcelExport(用户列表.xlsx)">
            导出
          </el-button>
const tableData = ref([]);
const handleExcelExport = fileName => {
          
   
  if (!fileName || typeof fileName !== string) {
          
   
    fileName = ExcelExport.xlsx;
  }
  exportExcel(tableData.value, fileName);
};

//接口
 export const exportExcel = (tableData, fileName) => {
          
   
  return service({
          
   
    url: XXX,
    method: post,
    data: {
          
   
      fileName: fileName,
      infoList: tableData,
    },
    responseType: blob,
  }).then(res => {
          
   
    handleFileError(res, fileName);
  });
};
const handleFileError = (res, fileName) => {
          
   
  if (typeof res.data !== undefined) {
          
   
    if (res.data.type === application/json) {
          
   
      const reader = new FileReader();
      reader.onload = function () {
          
   
        const message = JSON.parse(reader.result).msg;
        ElMessage({
          
   
          showClose: true,
          message: message,
          type: error,
        });
      };
      reader.readAsText(new Blob([res.data]));
    }
  } else {
          
   
    var downloadUrl = window.URL.createObjectURL(new Blob([res]));
    var a = document.createElement(a);
    a.style.display = none;
    a.href = downloadUrl;
    a.download = fileName;
    var event = new MouseEvent(click);
    a.dispatchEvent(event);
  }
};

这样我们就实现了导出功能,同时很多时候我们可能会遇到按需导出的需求,这是,我们只需要在接口中传递相应的参数即可。

经验分享 程序员 微信小程序 职场和发展