1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- 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
|