import FileSaver from 'file-saver' import XLSX from 'xlsx' import { Message, MessageBox } from 'element-ui' // 导出表格 /** * @param { String } id 表格id * @param { Array } width 配置生成文件表格所占的字符也就是表格每一行的宽度 * @param { String } name 生成文件名字 */ const downTable = (id, width, name) => { name = name + '.xlsx' || 'test.xlsx' const excel = exportExcel(document.getElementById(id), width, name) if (excel) { Message({ message: '导出成功', type: 'success', duration: 3 * 1000 }) } } /** * 导出表格为excel格式 * @param { DOM } ele // document.getElementById('table') * @param { string } fileName // test.xlsx */ function exportExcel(ele, wscols, fileName) { var fix = document.querySelector('.el-table__fixed'); /* 从表生成工作簿对象 */ let wb; if (fix) { wb = XLSX.utils.table_to_book(ele.removeChild(fix)); ele.appendChild(fix); } else { wb = XLSX.utils.table_to_book(ele); } console.log(wb.Sheets.Sheet1, Object.keys(wb.Sheets.Sheet1).filter(item => /^\D\d$/.test(item))) // 修改表格内容宽度 wb.Sheets.Sheet1['!cols'] = wscols; // 新增样式 xlsl-style引入有问题暂时注释 // const Sheet1Key = wb.Sheets.Sheet1 // Object.keys(Sheet1Key).forEach(item => { // if (/^\D\d$/.test(item)) { // Sheet1Key[item].s = { // font: { // color: { // rgb: 'FF4F81BD' //字体颜色 // } // }, // alignment: { // horizontal: 'center' // } // } // } // }) console.log(wb.Sheets.Sheet1) /* 获取二进制字符串作为输出 */ const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array', cellDates: true }) try { // Blob 对象表示一个不可变、原始数据的类文件对象。 // Blob 表示的不一定是JavaScript原生格式的数据。 // File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。 // 返回一个新创建的 Blob 对象,其内容由参数中给定的数组串联组成。 // 设置导出文件名称 FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), fileName) } catch (e) { if (typeof console !== 'undefined') console.log(e, wbout) } return wbout } export default downTable