/** * @this file function: 此文件是用于文件相关的助手类 * @author: Cll * @Date: 2019/11/4 0004 10:58 * */ import XLSX from 'xlsx' import FileSaver from 'file-saver' import {TypeHelper} from "@/helper/typeHelper/TypeHelper"; import {TimeHelper} from "@/helper/timeHelper/TimeHelper"; export class FileHelper { /** * * 导出表格文件 * @param tableName 导出的文件名称 * @param elementName 节点的类 * @returns {*} */ static exportTableToXSLX(tableName = '', elementName) { // 判断传入进来的表格名称是否为空,为空的话用当前的时间戳 if (TypeHelper.isEmpty(tableName)) { tableName = TimeHelper.timestamp(); } // 获取当前table的dom,必须要用clone,如果不可隆的话会导致你现有表中的表格发生改变 let tableDom = document.querySelector(elementName).cloneNode(true); let tableHeader = tableDom.querySelector('.el-table__header-wrapper'); let tableBody = tableDom.querySelector('.el-table__body'); tableHeader.childNodes[0].append(tableBody.childNodes[1]); let headerDom = tableHeader.childNodes[0].querySelectorAll('th'); // 移除左侧checkbox的节点 if (headerDom[0].querySelectorAll('.el-checkbox')) { headerDom[0].remove(); } for (let key in headerDom) { if (headerDom[key].innerText === '操作') { headerDom[key].remove(); } } // 清理掉checkbox 和操作的button let 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(); } } // 获取web的节点 let webBook = XLSX.utils.table_to_book(tableHeader); // 把当前的book节点写入XLSX中 let webOut = XLSX.write(webBook, {bookType: 'xlsx', bookSST: true, type: 'array'}); try { FileSaver.saveAs(new Blob([webOut], {type: 'application/octet-stream'}), tableName + '.xlsx'); } catch (e) { if (typeof console !== 'undefined') console.log(e, webOut) } return webOut } }