koa2+vue3通过exceljs实现数据导出excel文档

news/2024/7/21 4:13:47 标签: excel, 前端, javascript
  1. 服务端安装exceljs依赖
npm i exceljs
  1. 服务端实现代码
    1. 实现导出excel文件工具方法
const ExcelJS = require('exceljs');
/**
 * @description: 导出excel文件
 * @param {*} fileHeader  导出的表头
 * @param {*} data 导出的数据
 * @param {*} ctx 上下文对象
 * @return {*}
 */
async function exportExcel(fileHeader, data, ctx){
  const workbook = new ExcelJS.Workbook();
  const sheet = workbook.addWorksheet();
  sheet.columns = fileHeader.map((item,index)=>{
    return {
      header: item.header,
      key: item.key,
      width: item.width||25,
    }
  })
  data.forEach((item,index)=>{
    sheet.addRow(item);
  })
  
  // 生成Excel文件
  const buffer = await workbook.xlsx.writeBuffer();

  ctx.status = 200;
  ctx.set('Content-Type', 'application/vnd.openxmlformats');
  ctx.attachment('example.xlsx');
  ctx.body = buffer;

}

module.exports = exportExcel;
b. 使用案例
await exportExcel(
      [
        { header: "Name", key: "name", width: 20 },
        { header: "Age", key: "age", width: 10 },
        { header: "Email", key: "email" },
      ],
      [
        { name: "测试数据1", age: 320, email: "alice@example.com" },
        { name: "测试数据2", age: 330, email: "alice@example.com" },
        { name: "测试数据3", age: 340, email: "alice@example.com" },
      ],
      ctx
    );
  1. 客户端代码实现
    1. 创建下载excel工具方法
/**
 * @description: 下载excel方法
 * @param {String} filename
 * @param {Blob} blob
 */
async function exportExcel(filename = "导出文件", blob: Blob) {
  const url = window.URL.createObjectURL(blob);
  const link = document.createElement("a");
  link.href = url;
  link.download = filename; // 设置下载的文件名
  document.body.appendChild(link); // 需要添加到DOM中才能生效
  link.click();
  document.body.removeChild(link);
  window.URL.revokeObjectURL(url); // 释放内存
}

export default exportExcel;
b. 接口请求方法封装
export const exportTableApi = (url: string, params: any = {}) => {
  return http.get<any>(url + "/export-to-excel", params, {
    headers: {
      Accept:
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
    },
    **responseType: "blob",**
  });
};
c. 使用案例
/**
   * @description 导出表格数据
   * @return void
   * */
  const exportData = async (apiUrl, params) => {
    const data = await exportTableApi(apiUrl, params);
    const blob = new Blob([data as any], {
      type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
    });
    exportExcel(tableName, blob);
  };

http://www.niftyadmin.cn/n/5434209.html

相关文章

JavaScript /react 中new Map的用法

new Map()size属性: size属性返回Map结构的成员总数。 set(key, value)&#xff1a; set方法设置key所对应的键值&#xff0c;然后返回整个Map结构。如果key已经有值&#xff0c;则键值会被更新&#xff0c;否则就新生成该键。 // 常用写法 var obj new Map() obj.set(&qu…

cannot find -xml2: No such file or directory的解决方法

一&#xff0c;问题现象 在编译库的时候出现如下图所示的报错&#xff1a;C:/msys64/mingw32/bin/…/lib/gcc/i686-w64-mingw32/13.2.0/…/…/…/…/i686-w64-mingw32/bin/ld.exe: ca nnot find -lxml2: No such file or directory collect2.exe: error: ld returned 1 exit s…

DP最长上升子序列模型

目录 怪盗基德的滑翔翼代码实现 登山代码实现 合唱队形代码实现 友好城市问题分析代码实现 最大上升子序列和代码实现 *拦截导弹问题分析代码实现扩展 *导弹防御系统问题分析代码实现 *最长公共上升子序列问题分析代码实现 LIS 问题一般有三种解法 朴素版动态规划贪心二分树状…

【gpt实践】同时让chatgpt和claude开发俄罗斯方块

最近chatgpt和claude都在使用&#xff0c;其实大部分日常使用场景表现都没有相差太多&#xff0c;想搞一个有趣的小实验&#xff0c;如果同时让chatgpt和claude开发俄罗斯方块谁会表现的更好呢&#xff0c;说干就干&#xff01; claude稳定账号获取 prompt 我选择了用英文描…

并发编程2-掌握C#线程库的使用

C#线程库是用于在C#中进行多线程编程的一组类和方法。通过使用线程库&#xff0c;您可以创建和管理多个线程&#xff0c;实现并发执行和异步操作。以下是一些常用的C#线程库的使用介绍&#xff1a; 创建线程&#xff1a;您可以使用Thread类来创建新的线程。通过实例化Thread类…

水泵房远程监控物联网系统

随着物联网技术的快速发展&#xff0c;越来越多的行业开始利用物联网技术实现设备的远程监控与管理。水泵房作为城市供水系统的重要组成部分&#xff0c;其运行状态的监控与管理至关重要。HiWoo Cloud作为专业的物联网云服务平台&#xff0c;为水泵房远程监控提供了高效、稳定、…

加密算法详解

加密学的发展和应用 计算机加密学的发展历程可以大致分为以下几个阶段&#xff1a; 古典密码学时期&#xff08;古代至20世纪初&#xff09;&#xff1a; 在古代&#xff0c;人们就已经开始使用简单的加密技术来保护通信内容&#xff0c;例如凯撒密码、维吉尼亚密码等。到了近…

【四 (6)数据可视化之 Grafana安装、页面介绍、图表配置】

目录 文章导航一、Grafana介绍[✨ 特性]二、安装和配置1、安装2、权限配置&#xff08;账户/团队/用户&#xff09;①用户管理②团队管理③账户管理④看板权限 3、首选项配置4、插件管理①数据源插件②图表插件③应用插件④插件安装方式一⑤安装方式二 三、数据源管理1、添加数…