前端导出Excel表格

ops/2025/2/6 13:26:22/

1.主要依赖

xlsx+file-saver

2.核心代码

import * as XLSX from 'xlsx';
import FileSaver from "file-saver";
// 导出excel表格
const exportExcel= (table, name = null) => {console.log("获取表格", unref(table))try {let tableDom = unref(table).$el.cloneNode(true);let tableHeader = tableDom.querySelector('.el-table__header-wrapper');let tableBody = tableDom.querySelector('.el-table__body');// 移除左侧checkbox的节点let headerDom = tableHeader.childNodes[0].querySelectorAll('th');if (headerDom[0].querySelectorAll('.el-checkbox').length > 0) {headerDom[0].remove();}for (let key in headerDom) {if (headerDom[key].innerText === '操作') {headerDom[key].remove();}}// 清理掉checkbox 和操作的button(如果有)let tableList = tableBody.querySelectorAll('td');for (let key = 0; key < tableList.length; key++) {if (tableList[key].querySelectorAll('.el-checkbox').length > 0 || tableList[key].querySelectorAll('.el-button').length > 0) {tableList[key].remove();}}// 处理表头和表体,将其合并成一个完整的表格let clonedTable = document.createElement('table');clonedTable.appendChild(tableHeader.cloneNode(true));  // 表头clonedTable.appendChild(tableBody.cloneNode(true));    // 表体// 使用 xlsx 库的 utils.table_to_book 方法将完整的 HTML 表格转换为工作簿(workbook)let webBook = XLSX.utils.table_to_book(clonedTable, { raw: true });// 将工作簿写入 XLSX 格式let webOut = XLSX.write(webBook, { bookType: 'xlsx', bookSST: true, type: 'array' });let exportName = name ? name + '_' + Date.now() : Date.now()try {FileSaver.saveAs(new Blob([webOut], { type: 'application/octet-stream' }), exportName + '.xlsx');} catch (e) {if (typeof console !== 'undefined') {console.error("导出表格失败", err, webOut)ElMessage.error("导出失败,请重试")}}} catch (err) {console.error("导出表格失败", err)ElMessage.error("导出失败,请重试")}
}export default {exportExcel
}

3.前端代码

<el-button @click="exportExcel(tableRef, '数据导出')">导出</el-button>
<el-table ref="tableRef">
···
</el-table>
const tableRef = ref(null);

4.注意要素

  • 1.在Vue3环境下接收ref需要使用 unref(table)将绑定数据进行解构方可使用;
  • 2.使用xlsx导出表格时间显示不全,会在Excel中显示###且导出的时间数据与原数据存在43秒的偏差,此时需要在转化代码 let webBook = XLSX.utils.table_to_book(clonedTable);中加入, { raw: true }
// 使用 xlsx 库的 utils.table_to_book 方法将完整的 HTML 表格转换为工作簿(workbook)
let webBook = XLSX.utils.table_to_book(clonedTable, { raw: true });

5.参考文章

1.https://blog.csdn.net/gentleman_hua/article/details/124126635


http://www.ppmy.cn/ops/156161.html

相关文章

java进阶知识点

java回收机制 浅谈java中的反射 依赖注入的简单理解 通过接口的引用和构造方法的表达&#xff0c;将一些事情整好了反过来传给需要用到的地方~ 这样做得好处&#xff1a;做到了单一职责&#xff0c;并且提高了复用性&#xff0c;解耦了之后&#xff0c;任你如何实现&#xf…

Git、Github和Gitee完整讲解:丛基础到进阶功能

第一部分&#xff1a;Git 是什么&#xff1f; 比喻&#xff1a;Git就像是一本“时光机日记本” 每一段代码的改动&#xff0c;Git都会帮你记录下来&#xff0c;像是在写日记。如果出现问题或者想查看之前的版本&#xff0c;Git可以带你“穿越回过去”&#xff0c;找到任意时间…

Node.js学习指南

一、模块化规范 nodejs使用的模块化规范 叫做 common.js 规范: 每一个模块都有独立的作用域 代码在各自模块中执行 不会造成全局污染 每一个模块都是一个独立的文件&#xff08;module对象&#xff09; 模块可以被多次加载&#xff08;module.exports 属性&#xff09; 但是仅…

http跳转https

1、第一种&#xff1a;不好使 在nginx的配置中&#xff0c;在https的server站点添加如下头部&#xff1a; add_header Strict-Transport-Security “max-age63072000; includeSubdomains; preload”; 这样当第一次以https方式访问我的网站&#xff0c;nginx则会告知客户端的浏览…

二叉树——429,515,116

今天继续做关于二叉树层序遍历的相关题目&#xff0c;一共有三道题&#xff0c;思路都借鉴于最基础的二叉树的层序遍历。 LeetCode429.N叉树的层序遍历 这道题不再是二叉树了&#xff0c;变成了N叉树&#xff0c;也就是该树每一个节点的子节点数量不确定&#xff0c;可能为2&a…

北大AGI与具身智能评估新范式!Tong测试:基于动态具身物理和社会互动的评估标准

作者&#xff1a;Yujia Peng, Jiaheng Han, Zhenliang Zhang, Lifeng Fan, Tengyu Liu, Siyuan Qi, Xue Feng, Yuxi Ma, Yizhou Wang, Song-Chun Zhu 单位&#xff1a;北京通用人工智能研究院国家通用人工智能重点实验室&#xff0c;北京大学人工智能研究所&#xff0c;北京大…

大模型的底层逻辑及Transformer架构

一、大模型的底层逻辑 1.数据驱动 大模型依赖海量的数据进行训练&#xff0c;数据的质量和数量直接影响模型的性能。通过大量的数据&#xff0c;模型能够学习到丰富的模式和规律&#xff0c;从而更好地处理各种任务。 2.深度学习架构 大模型基于深度学习技术&#xff0c;通常…

C++哈希(链地址法)(二)详解

文章目录 1.开放地址法1.1key不能取模的问题1.1.1将字符串转为整型1.1.2将日期类转为整型 2.哈希函数2.1乘法散列法&#xff08;了解&#xff09;2.2全域散列法&#xff08;了解&#xff09; 3.处理哈希冲突3.1线性探测&#xff08;挨着找&#xff09;3.2二次探测&#xff08;跳…