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 前已经正确安装该库。
  • 处理异步操作时,要注意错误处理,避免出现未捕获的异常。
  • 导出大文件时,可能会影响性能,需要考虑优化。
相关推荐
迷曳15 分钟前
28、鸿蒙Harmony Next开发:不依赖UI组件的全局气泡提示 (openPopup)和不依赖UI组件的全局菜单 (openMenu)、Toast
前端·ui·harmonyos·鸿蒙
爱分享的程序员27 分钟前
前端面试专栏-工程化:29.微前端架构设计与实践
前端·javascript·面试
上单带刀不带妹31 分钟前
Vue3递归组件详解:构建动态树形结构的终极方案
前端·javascript·vue.js·前端框架
-半.33 分钟前
Collection接口的详细介绍以及底层原理——包括数据结构红黑树、二叉树等,从0到彻底掌握Collection只需这篇文章
前端·html
90后的晨仔1 小时前
📦 Vue CLI 项目结构超详细注释版解析
前端·vue.js
@大迁世界1 小时前
用CSS轻松调整图片大小,避免拉伸和变形
前端·css
一颗不甘坠落的流星1 小时前
【JS】获取元素宽高(例如div)
前端·javascript·react.js
白开水都有人用1 小时前
VUE目录结构详解
前端·javascript·vue.js
if时光重来1 小时前
axios统一封装规范管理
前端·vue.js
m0dw1 小时前
js迭代器
开发语言·前端·javascript