【Vue】vue3 中 如何将el-table的表格数据下载为.xlsx格式文件

安装依赖

首先,你需要安装 xlsx 和 file-saver 这两个库。

npm install xlsx file-saver --save

有兴趣可以看看两个库的官方说明,直接看下面使用也没问题。

xlsx 官方介绍

The SheetJS Community Edition offers battle-tested open-source solutions for extracting useful data from almost any complex spreadsheet and generating new spreadsheets that will work with legacy and modern software alike.
SheetJS社区版提供了经过实战考验的开源解决方案,用于从几乎任何复杂的电子表格中提取有用的数据,并生成可与传统和现代软件一起使用的新电子表格。
SheetJS Pro offers solutions beyond data processing: Edit complex templates with ease; let out your inner Picasso with styling; make custom sheets with images/graphs/PivotTables; evaluate formula expressions and port calculations to web apps; automate common spreadsheet tasks, and much more!
SheetJS Pro提供数据处理以外的解决方案:轻松编辑复杂的模板;用造型释放你内心的毕加索;使用图像/图形/数据透视表制作自定义工作表;评估公式表达式并将计算端口到 Web 应用程序;自动执行常见的电子表格任务,以及更多!

file-saver npm 文档

准备数据

将你要导出的表格数据准备为一个二维数组。比如:

const data = tabelData.map((item: any) => {
    const arr: any[] = [];
    item.forEach((j: any) => {
      arr.push(j);
    });
    return arr;
  });

定义导出方法

你需要创建一个函数,用于处理你上面准备的数据,并且返回一个 xlsx 文件的 blob。

import * as XLSX from 'xlsx';

export const exportExcel = (data: any[]) => {
  // 创建一个空的工作簿
  const workbook = XLSX.utils.book_new();

  // 创建一个工作表
  const worksheet = XLSX.utils.aoa_to_sheet(data);

  // 将工作表添加到工作簿中
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');

  // 将工作簿转换为二进制数据流
  const excelData = XLSX.write(workbook, { type: 'array', bookType: 'xlsx' });

  // 将二进制数据流转换为 Blob 对象
  const blob = new Blob([excelData], {
    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  });

  return blob;
};

下载文件

最后你需要下载文件,可以使用上面安装的 file-save 中提供的 saveAs 函数

import { saveAs } from 'file-saver';

// 处理表格文件
const blob = exportExcel(data);
const fileName = `${item.file.name.split('.')[0]}.xlsx`;
// 下载
saveAs(blob, fileName);

ps:如果在本地使用,正常下载但浏览器会报警告,是因为我们本地使用 http 下载导致了,这个可以不用管,线上是不会出现这个警告的。

参考资料

xlsx npm 文档file-saver npm 文档vue3导入elcel表格并展示(使用xlsx插件+vite+element-plus)/js上传表格(js+xlsx)

### 实现 Vue2 中 el-table 数据导出功能 为了实现在 Vue2 项目中通过调用接口导出 `el-table` 组件内数据表格文件的功能,可以采用如下方法: #### 准备工作 安装必要的依赖库以便于操作文件和生成 Excel 文件。这可以通过 npm 或 yarn 来完成。 ```bash npm install file-saver xlsx --save ``` 此命令会安装两个重要的包:`file-saver`用于保存文件,而`xlsx`则负责创建 Excel 文档[^1]。 #### 创建导出函数 定义一个名为 `exportTableToExcel` 的辅助函数,该函数接收三个参数——API URL、请求体以及自定义配置项(可选)。它将发起 HTTP 请求以获取服务器返回的数据,并将其转换成 Excel 表格格式后下载到客户端设备上。 ```javascript import XLSX from &#39;xlsx&#39;; import { saveAs } from &#39;file-saver&#39;; function exportTableToExcel(url, body, config = {}) { fetch(url, { method: &#39;POST&#39;, headers: new Headers({ &#39;Content-Type&#39;: &#39;application/json&#39; }), body: JSON.stringify(body), ...config, }) .then((response) => response.json()) .then((data) => { const ws = XLSX.utils.json_to_sheet(data); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, "SheetJS"); /* generate file and send to client */ XLSX.writeFile(wb, "sheetjs.xlsx", { bookType: &#39;xlsx&#39;, type: &#39;array&#39; }); }).catch(error => console.error(&#39;Error:&#39;, error)); } ``` 这段代码展示了如何构建一个通用的导出逻辑,其中包含了发送 POST 请求给指定 API 地址的过程,接着把接收到的结果转化为适合写入 Excel 工作簿的形式,最后触发浏览器行为让用户能够选择位置存储最终形成的电子表格文档[^4]。 #### 调整页面上的按钮事件绑定 假设有一个按钮用来触发表单提交动作,在其对应的点击处理器里调用上述定义好的 `exportTableToExcel()` 方法即可启动整个流程。这里需要注意的是,如果涉及到分页显示的内容,则应该先收集所有记录而不是仅限当前可见部分;对于多选情况下的特定条目导出同样适用相同原则[^2]。 ```html <template> <!-- Other template code --> <button @click="handleExport">导出</button> </template> <script> // ... methods: { handleExport() { // Collect all data or selected rows based on your requirement. let tableData = this.getAllData(); // Replace with actual implementation. exportTableToExcel(&#39;/api/export&#39;, tableData); // Call the function defined earlier. } } </script> ``` 以上就是关于在 Vue2 环境下结合 `el-table` 和外部服务端支持来达成批量导出目标的具体实践方案说明[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值