vue3导出表格(导出成Execl表)

前言:该封装方法适用于后端返回的数据是文档流的时候

1.在utils文件夹中新建exportExecl.js用于封装方法

javascript 复制代码
export const exportExecl = (fn, name, data = {}) => {
    fn(data).then((res) => {
      const content = res;
      const blob = new Blob([content]);
      const fileName = name;
      if ("download" in document.createElement("a")) {
        // 非IE下载
        const elink = document.createElement("a"); // 创建一个a标签
        elink.download = fileName;
        elink.style.display = "none";
        elink.href = URL.createObjectURL(blob);
        document.body.appendChild(elink);
        elink.click();
        URL.revokeObjectURL(elink.href); // 释放URL 对象
        document.body.removeChild(elink);
      } else {
        // IE10+下载
        navigator.msSaveBlob(blob, fileName);
      }
    });
  };

2.在请求的接口是中添加请求类型(responseType: 'arraybuffer')和请求头(headers)

javascript 复制代码
// 服务项列表的导出
export function serviceItemExport(query) {
  return request({
    url: '/hct-oms/serviceItem/export',
    method: 'get',
    params: query,
    responseType: 'arraybuffer', // 文档流类型
    headers:{ // 请求头
      'Content-Type':'application/x-www-form-urlencoded'
    }
  })
}

3.使用

javascript 复制代码
<el-button type="primary" @click="exportService">导出</el-button>

import { exportExecl } from '@/utils/exportExecl';
import {
  serviceItemExport, // 服务项列表的导出
} from '@/api/serviceItemList/index';
// 导出

const exportService = () => {
  const data = {ids:datas.ids};
  exportExecl(serviceItemExport, '服务项表.xlsx', data);
};
// 参数1:是请求的接口,后端会返回文档流;参数2:导出的文件名称,自己随便定义;参数3:接口需要传递的数据
相关推荐
qq_422152572 分钟前
视频转 GIF 工具怎么选?2026 年动图制作方案与画质参数对比
javascript·vue.js·音视频
陈老老老板9 分钟前
如何用 Bright Data Web Scraper API + Coze 搭建 Reddit 行业情报聚合 Bot(2026 实战指南)
前端·人工智能
恋猫de小郭15 分钟前
由于 iOS 26 的键盘变化,Flutter 又要重构键盘区域逻辑
android·前端·flutter
怕浪猫21 分钟前
Electron 开发实战(十五):实战项目|从零搭建桌面即时通讯(IM)应用
前端·javascript·electron
喜欢踢足球的老罗28 分钟前
破解 Chrome 扩展的「两世界难题」:MV3 下的 ISOLATED 与 MAIN World 桥接之道
前端·chrome
一拳一个娘娘腔29 分钟前
【第七期】漏洞攻防-前端篇:XSS 与 CSRF —— 当浏览器成为攻击者的“肉鸡”
前端·xss·csrf
2501_9127840833 分钟前
跨境电商独立站技术选型:为什么React+Vue+Laravel成为主流?
vue.js·react.js·laravel·taocarts
不吃鱼的羊1 小时前
DaVinci配置NVM模块
前端·javascript·网络
一坨阿亮1 小时前
使用e-tree开发树形穿梭框
javascript·vue.js·elementui