vue3+TypeScript实现导出Excel功能

本文档介绍了如何在Vue3应用中使用Element-Plus组件实现文件导入导出功能,特别是下载模板和导出Excel。通过示例代码详细展示了下载模板按钮的实现以及导出数据到Excel的接口调用,并提供了错误处理方法。
摘要由CSDN通过智能技术生成

上一篇博客👉链接在这,我们使用vue3+ts实现了导入的功能,接下来,还是使用同一个组件(element-plus上传组件)来实现导出,在上篇博客中,我们在使用这个组件的同时写了一个下载模板的功能,接下来,这篇博客,我们就帮助大家完善下载模板的功能以及实现导出的功能。✌️✌️✌️

一、效果展示


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

二、模板下载

	<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);
  }
};

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

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值