| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | import XLSX from 'xlsx';import {ElMessage, ElMessageBox} from "element-plus";import {listIsBlank} from "./blank-utils";import XEUtils from "xe-utils";export function Export(json, fields, filename) {    let temp = []    XEUtils.arrayEach(json, (item) => {        let tempData = {}        for (let key in fields) {            tempData[fields[key]] = item[key] ? item[key] : "";        }        temp.push(tempData)    })    let sheetName = filename //excel的文件名称    let wb = XLSX.utils.book_new()  //工作簿对象包含一SheetNames数组,以及一个表对象映射表名称到表对象。XLSX.utils.book_new实用函数创建一个新的工作簿对象。    let ws = XLSX.utils.json_to_sheet(temp, {header: Object.values(fields)}) //将JS对象数组转换为工作表。    wb.SheetNames.push(sheetName)    wb.Sheets[sheetName] = ws    const defaultCellStyle = {        font: {name: "Verdana", sz: 13, color: "FF00FF88"},        fill: {fgColor: {rgb: "FFFFAA00"}}    };//设置表格的样式    let wopts = {        bookType: 'xlsx',        bookSST: false,        type: 'binary',        cellStyles: true,        defaultCellStyle: defaultCellStyle,        showGridLines: false    }  //写入的样式    let wbout = XLSX.write(wb, wopts)    let blob = new Blob([s2ab(wbout)], {type: 'application/octet-stream'})    let link = document.createElement('a')    link.href = window.URL.createObjectURL(blob)    link.download = filename + '.xlsx'    document.body.appendChild(link)    link.click()    document.body.removeChild(link)}export function ExcelName(json, fields) {    if (listIsBlank(json)) {        return ElMessage.error("没有可以导出的数据。")    }    ElMessageBox.prompt('请输入导出的文件名称。', '提示', {        type: "warning",        confirmButtonText: '确定',        cancelButtonText: '取消',        inputPattern: /\S/,        inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',    }).then(({value}) => {        Export(json, fields, value)    }).catch(() => {    })}const s2ab = s => {    let buf;    let i;    if (typeof ArrayBuffer !== 'undefined') {        buf = new ArrayBuffer(s.length);        const view = new Uint8Array(buf);        for (i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff        return buf    } else {        buf = new Array(s.length);        for (i = 0; i !== s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;        return buf;    }}
 |