vue中将el-table导出为excel文件

news/2025/2/23 6:03:04

在 Vue + Element UI 中,el-table 数据导出 Excel 文件,可以使用 xlsxSheetJS)库进行处理。以下是详细的实现方法,包括安装依赖、代码示例和优化建议。

1. 安装依赖

首先,安装 xlsx 库:

javascript">复制编辑
npm install xlsx file-saver --save
  • xlsx:用于解析和生成 Excel 文件。
  • file-saver:用于保存导出的 Excel 文件。

2. 代码实现

完整示例

javascript">vue
复制编辑
<template>
  <div>
    <el-button type="primary" @click="exportExcel">导出 Excel</el-button>
    <el-table :data="tableData" border style="width: 100%">
      <el-table-column prop="id" label="ID" width="80"></el-table-column>
      <el-table-column prop="name" label="姓名" width="120"></el-table-column>
      <el-table-column prop="age" label="年龄" width="80"></el-table-column>
      <el-table-column prop="city" label="城市" width="150"></el-table-column>
    </el-table>
  </div>
</template>

<script>
import * as XLSX from "xlsx";
import { saveAs } from "file-saver";

export default {
  data() {
    return {
      tableData: [
        { id: 1, name: "张三", age: 25, city: "北京" },
        { id: 2, name: "李四", age: 30, city: "上海" },
        { id: 3, name: "王五", age: 28, city: "广州" },
      ],
    };
  },
  methods: {
    exportExcel() {
      // 1. 提取表格数据
      const data = this.tableData.map((row) => ({
        ID: row.id,
        姓名: row.name,
        年龄: row.age,
        城市: row.city,
      }));

      // 2. 创建工作表
      const worksheet = XLSX.utils.json_to_sheet(data);

      // 3. 创建工作簿
      const workbook = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(workbook, worksheet, "表格数据");

      // 4. 生成 Excel 并下载
      const excelBuffer = XLSX.write(workbook, {
        bookType: "xlsx",
        type: "array",
      });

      const blob = new Blob([excelBuffer], {
        type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      });

      saveAs(blob, "表格数据.xlsx");
    },
  },
};
</script>

3. 代码解析

exportExcel 方法

  1. 格式化数据

    • 先将 el-table 的 tableData 数据格式化成适合 Excel 的 JSON 结构。
    • json_to_sheet 方法用于将 JSON 转换为 Excel 可识别的表格。
  2. 创建工作表 & 工作簿

    • XLSX.utils.json_to_sheet(data) 创建 Excel 工作表。
    • XLSX.utils.book_new() 创建新的 Excel 文件(工作簿)。
    • XLSX.utils.book_append_sheet(workbook, worksheet, "表格数据") 将表格数据添加到工作簿。
  3. 生成 Excel 并触发下载

    • XLSX.write(workbook, { bookType: "xlsx", type: "array" }) 生成 Excel 文件的二进制数据。
    • new Blob([...], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }) 生成 Excel 文件 Blob。
    • saveAs(blob, "表格数据.xlsx") 触发浏览器下载。

4. 额外优化

✅ 1. 自定义表头

可以用 el-table-column 的 label 作为 Excel 表头,而不是手动写:

javascript">js
复制编辑
exportExcel() {
  const headers = this.$refs.table.columns.map(col => col.label); // 获取表头
  const keys = this.$refs.table.columns.map(col => col.property); // 获取字段

  const data = this.tableData.map(row => {
    let obj = {};
    keys.forEach((key, index) => {
      obj[headers[index]] = row[key];
    });
    return obj;
  });

  const worksheet = XLSX.utils.json_to_sheet(data);
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, "数据");

  const excelBuffer = XLSX.write(workbook, { bookType: "xlsx", type: "array" });
  const blob = new Blob([excelBuffer], {
    type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  });

  saveAs(blob, "表格数据.xlsx");
}

然后在 el-table 中添加 ref="table"


✅ 2. 处理合并单元格

可以使用 XLSX.utils.sheet_add_aoa 进行合并:

javascript">js
复制编辑
XLSX.utils.sheet_add_aoa(worksheet, [["ID", "姓名", "年龄", "城市"]], { origin: "A1" });

这样可以在 A1 手动插入表头。


✅ 3. 设置列宽

javascript">js
复制编辑
worksheet["!cols"] = [
  { wch: 10 }, // ID列宽
  { wch: 20 }, // 姓名列宽
  { wch: 10 }, // 年龄列宽
  { wch: 15 }, // 城市列宽
];

5. 结论

✅ 适用于 Vue 2.0 + Element UI 的 el-table
✅ 可以导出 Excel,支持中文表头
✅ 支持自定义表头、列宽、格式优化
✅ 减少人工操作,提高开发效率

如果你需要更复杂的 Excel 处理,比如 合并单元格、设置样式、多个 Sheet 导出,可以继续优化!😃


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

相关文章

宝塔扩容——阿里云如何操作

一、创建快照 磁盘快照&#xff0c;将数据备份&#xff0c;防止丢失。 1.登录“阿里云”账号 2.点击“控制台”——“云服务器 ECS” 3.点击“基本信息”下&#xff0c;右下角“系统盘” 4.点击“创建快照” 二、磁盘扩容 1.点击“云盘扩容” 2. 选择自己要扩容的大小 …

代码笔记插件

idea代码笔记插件 AnNote是一款代码笔记插件&#xff0c;支持多种语言&#xff0c;支持代码高亮&#xff0c;支持代码自动补全&#xff0c;支持搜索、支持附件&#xff0c;支持markdown格式文件 AnNote - IntelliJ IDEs Plugin | Marketplace 75折折扣&#xff1a; MGRYF-TJ…

在WPS中设置word的页码不从第一页开始,从指定页开始插入页码

大家好&#xff0c;我是小鱼。 在日常的办公中为Word文档页面插入页码是经常要做的。如果一个文档有几十页&#xff0c;插入页码不仅可以快速定位到文章的内容&#xff0c;如果需要制作目录也方便制作。正确情况下插入页码都是从第一页开始的&#xff0c;但是有些文档比如说标…

CPU、SOC、MPU、MCU--详细分析四者的区别

一、CPU 与SOC的区别 1.CPU 对于电脑&#xff0c;我们经常提到&#xff0c;处理器&#xff0c;内存&#xff0c;显卡&#xff0c;硬盘四大部分可以组成一个基本的电脑。其中的处理器——Central Processing Unit&#xff08;中央处理器&#xff09;。CPU是一台计算机的运算核…

算法与数据结构(环形链表II)

题目 思路 这个题其实与之前环形链表的题差不多&#xff0c;这个麻烦的一点是需要你返回入环的第一个节点。 若我们继续用哈希表还是很简单&#xff0c;就是继续遍历链表&#xff0c;遇到的第一个重复的值即为入环的第一个节点。 这里我们看一下快慢指针的方法。 这里我们假…

ctfshow——源码压缩包泄露

题目提示&#xff1a;解压源码到当前目录&#xff0c;测试正常&#xff0c;收工 题目如下图所示&#xff1a; 根据提示&#xff0c;我们需要找到解压包来帮助我们找到flag。但是我们并不确定解压包的名字是什么。 这时候可以通过dirsearch -u URL 来进行扫描 例如 dirsearch…

AGI觉醒假说的科学反驳:从数学根基到现实约束的深度解析

文章目录 引言:AGI觉醒论的核心迷思一、信息论视角:意识产生的熵约束1.1 香农熵的物理极限1.2 量子退相干的时间屏障二、数学根基:形式系统的自指困境2.1 哥德尔不完备定理的现代诠释三、概念解构:AGI觉醒假说的认知陷阱3.1 术语混淆的迷雾3.2 拟人化谬误的认知根源四、意识…

基于 JavaWeb 的 SSM+Maven 微信小程序快递柜管理系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…