vue使用file-saver本地文件导出功能

作者:前端辣白菜 时间:2023-07-02 16:59:26 

1:安装xlsx和file-saver

npm install file-saver xlsx  --save

2:创建localExports.js文件

3:直接上代码


import XLSX from 'xlsx';
const FileSaver = require('file-saver');
import { getRandomNum } from '@/utils';
// 本地导出表格
/**
* 导出Excel文件
* @param {*} elementName   table组件id名称
* @param {*} fileName      文件名
* @description             使用说明
*                          import { exportsXlsx } from '@/utils/localExports';
*                          exportsXlsx('idName', '文件名称');
*/

export function exportsXlsx(elementName, fileName) {
 const time = new Date().getTime();
 const random = getRandomNum(100, 1000);
 const wb = XLSX.utils.table_to_book(clearHead(elementName), { raw: true });
 const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' });
 FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), `${fileName}${time}-${random}.xlsx`);
}
function clearHead(elementName) {
 const tableDom = document.querySelector('#' + elementName).cloneNode(true);
 const tableHeader = tableDom.querySelector('.el-table__header-wrapper');
 const tableBody = tableDom.querySelector('.el-table__body');
 tableHeader.childNodes[0].append(tableBody.childNodes[1]);
 const headerDom = tableHeader.childNodes[0].querySelectorAll('th');

// 移除左侧checkbox的节点
 if (headerDom[0].querySelectorAll('.el-checkbox')) {
   headerDom[0].remove();
 }
 for (const key in headerDom) {
   if (headerDom[key].innerText === '操作') {
     headerDom[key].remove();
   }
 }
 // 清理掉checkbox 和操作的button
 const tableList = tableHeader.childNodes[0].childNodes[2].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();
   }
 }
 return tableHeader;
}

4:使用方式


<el-table
         id="good"
         v-loading="listLoading"
         :header-cell-style="{ background: '#FAFAFA', color: '#212532' }"
         :data="list"
         tooltip-effect="dark"
         style="width: 100%"
         height="566"
         border
         @selection-change="handleSelectionChange"
       >

import { exportsXlsx } from '@/utils/localExports';
methods:{
 onSearch() {
     exportsXlsx('good', '模拟数据');

},
}

5:good为table组件的id,getRamdomNum方法如下



// 生成随机数
export function getRandomNum(Min, Max) {
 var Range = Max - Min;
 var Rand = Math.random();
 return (Min + Math.round(Rand * Range));
}

来源:https://blog.csdn.net/weixin_42484657/article/details/122321802

标签:vue,file-saver,文件,导出
0
投稿

猜你喜欢

  • 如何利用 Python 绘制动态可视化图表

    2022-11-23 17:14:37
  • golang1.16新特性速览(推荐)

    2023-07-06 10:34:47
  • 浅谈python元素如何去重,去重后如何保持原来元素的顺序不变

    2023-03-07 19:39:32
  • vue parseHTML源码解析hars end comment钩子函数

    2024-06-05 15:29:14
  • 如何高效使用Python字典的方法详解

    2021-07-26 04:29:03
  • asp如何做一个专门显示文本文件的页面?

    2010-07-12 19:04:00
  • 深入了解SQL Server 2008 商业智能平台

    2009-01-15 13:03:00
  • Python正则表达式匹配ip地址实例

    2023-06-13 15:06:12
  • python数据库编程 ODBC方式实现通讯录

    2024-01-15 10:58:01
  • 在JavaScript中获取请求的URL参数

    2024-04-25 13:08:43
  • layabox2.0命令行在vscode中编译打包问题

    2022-08-27 02:23:20
  • python机器学习之神经网络

    2023-11-10 21:39:19
  • Python用SSH连接到网络设备

    2022-01-20 08:57:41
  • PHP中动态显示签名和ip原理

    2024-05-11 10:12:33
  • Linux下MySQL多实例部署及安装指南

    2024-01-21 10:49:28
  • Python利用FlashText算法实现替换字符串

    2023-05-17 06:18:11
  • :hover在IE6下的问题

    2009-06-18 21:09:00
  • JS 设计模式之:单例模式定义与实现方法浅析

    2024-04-29 14:10:04
  • python 中的 asyncio 异步协程

    2022-09-15 12:30:53
  • tensorflow中的数据类型dtype用法说明

    2023-08-28 05:44:30
  • asp之家 网络编程 m.aspxhome.com