ExcelJS 初学者教程:在 Vue 项目中实现表格数据导出

1. 引言

ExcelJS 是一个强大的 JavaScript 库,用于创建、读取和修改 Excel 文件。在前端开发中,常常需要将表格数据导出为 Excel 文件,ExcelJS 能很好地满足这一需求。本教程将结合 Vue 项目,详细介绍如何使用 ExcelJS 实现表格数据导出功能。

2. 环境准备

2.1 创建 Vue 项目

如果你还没有 Vue 项目,可以使用 Vue CLI 创建一个新的项目:

bash 复制代码
bash
npm install -g @vue/cli
vue create exceljs-demo
cd exceljs-demo

2.2 安装 ExcelJS

在项目根目录下,使用 npm 或 yarn 安装 ExcelJS:

csharp 复制代码
bash
npm install exceljs
# 或者
yarn add exceljs

3. 案例场景

假设我们有一个 Vue 项目,页面上有一个表格展示报关单表体数据,现在需要将这些数据导出为 Excel 文件。

4. ExcelJS 基础使用步骤

4.1 引入 ExcelJS

在需要使用 ExcelJS 的组件中引入该库:

xml 复制代码
imForm.vue

<script setup>
import ExcelJS from 'exceljs';
// ... 其他引入代码 ...
</script>

4.2 创建工作簿和工作表

在导出函数中,首先创建一个 Workbook 对象,然后添加一个工作表:

xml 复制代码
imForm.vue
<script setup>
// ... 已有代码 ...

const exportTable = async () => {
  // ... 检查数据是否为空的代码 ...

  const filename = '表体数据';
  const sheetname = '表体数据';
  // 创建一个新的工作簿
  const workbook = new ExcelJS.Workbook();
  // 在工作簿中添加一个工作表
  const worksheet = workbook.addWorksheet(sheetname);

  // ... 后续代码 ...
};

// ... 已有代码 ...
</script>

4.3 定义表头和列配置

根据表格数据的结构,定义 Excel 表格的表头和列配置:

xml 复制代码
imForm.vue

<script setup>
// ... 已有代码 ...

const columnsConfig = [
  { prop: "gNo", label: "项号" },
  { prop: "contrItem", label: getLabelByProp('contrItem') },
  // ... 其他列配置 ...
];

const exportTable = async () => {
  // ... 已有代码 ...

  const columns = [];
  columnsConfig.forEach((field) => {
    if (field.label && field.prop) {
      columns.push({
        header: typeof field.label === 'function' ? field.label() : field.label,
        key: field.prop
      });
    }
  });
  // 将列配置应用到工作表中
  worksheet.columns = columns;

  // ... 后续代码 ...
};

// ... 已有代码 ...
</script>

4.4 添加数据到工作表

将表格数据添加到工作表的行中:

xml 复制代码
imDeclarationForm.vue
Apply
<script setup>
// ... 已有代码 ...

const exportTable = async () => {
  // ... 已有代码 ...

  // 将表格数据添加到工作表中
  worksheet.addRows(tableData.value);

  // ... 后续代码 ...
};

// ... 已有代码 ...
</script>

4.5 导出 Excel 文件

将工作簿转换为二进制数据,创建 Blob 对象,然后通过创建 <a> 标签模拟点击实现文件下载:

xml 复制代码
imForm.vue

<script setup>
// ... 已有代码 ...

const exportTable = async () => {
  // ... 已有代码 ...

  try {
    // 将工作簿转换为二进制数据
    const buffer = await workbook.xlsx.writeBuffer();
    // 创建 Blob 对象
    const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
    // 创建临时 URL
    const url = window.URL.createObjectURL(blob);
    // 创建 <a> 标签
    const a = document.createElement('a');
    a.href = url;
    a.download = `${filename}.xlsx`;
    // 模拟点击下载
    a.click();
    // 释放临时 URL
    window.URL.revokeObjectURL(url);
    ElNotification({
      title: '成功',
      message: '表格导出成功',
      type: 'success',
    });
  } catch (error) {
    console.error('导出表格失败:', error);
    ElNotification({
      title: '失败',
      message: '表格导出失败',
      type: 'error',
    });
  }
};

// ... 已有代码 ...
</script>

4.6 添加导出按钮

在模板中添加一个按钮,绑定导出函数:

xml 复制代码
imDeclarationForm.vue
Apply
<template>
  <!-- ... 已有代码 ... -->
  <el-card>
    <el-button type="primary" @click="exportTable">导出表格</el-button>
    <el-table :data="tableData" style="width: 100%" border stripe @row-click="handleRowClick">
      <!-- ... 表格列配置 ... -->
    </el-table>
  </el-card>
  <!-- ... 已有代码 ... -->
</template>

5. 总结

通过以上步骤,我们在 Vue 项目中使用 ExcelJS 实现了表格数据导出为 Excel 文件的功能。主要步骤包括引入 ExcelJS、创建工作簿和工作表、定义表头和列配置、添加数据到工作表以及导出文件。ExcelJS 还提供了丰富的 API 用于样式设置、合并单元格等高级操作,你可以根据实际需求进一步探索。

6. 注意事项

  • 确保在使用 ExcelJS 前已经正确安装该库。
  • 处理异步操作时,要注意错误处理,避免出现未捕获的异常。
  • 导出大文件时,可能会影响性能,需要考虑优化。
相关推荐
Warren9836 分钟前
Lua 脚本在 Redis 中的应用
java·前端·网络·vue.js·redis·junit·lua
mCell1 小时前
JavaScript 运行机制详解:再谈 Event Loop
前端·javascript·浏览器
amy_jork3 小时前
npm删除包
开发语言·javascript·ecmascript
帧栈5 小时前
开发避坑指南(27):Vue3中高效安全修改列表元素属性的方法
前端·vue.js
max5006005 小时前
基于桥梁三维模型的无人机检测路径规划系统设计与实现
前端·javascript·python·算法·无人机·easyui
excel5 小时前
使用函数式封装绘制科赫雪花(Koch Snowflake)
前端
我命由我123456 小时前
软件开发 - 避免过多的 if-else 语句(使用策略模式、使用映射表、使用枚举、使用函数式编程)
java·开发语言·javascript·设计模式·java-ee·策略模式·js
萌萌哒草头将军6 小时前
Node.js v24.6.0 新功能速览 🚀🚀🚀
前端·javascript·node.js
AALoveTouch7 小时前
大麦APP抢票揭秘
javascript
持久的棒棒君7 小时前
启动electron桌面项目控制台输出中文时乱码解决
前端·javascript·electron