import * as XLSX from "xlsx"; /** * 导出Excel(简单的导出) * @param {Array} data 二维数据 * @param {String} fileName 文件名 */ export function easyExport(data, fileName = '导出文件') { const wb = XLSX.utils.book_new(); // 二维数组例子:[ ['姓名', '年龄', '城市'], ['张三', 25, '北京'], ['李四', 30, '上海'] ]; const ws = XLSX.utils.aoa_to_sheet(data); // aoa_to_sheet 方法将二维数组转换为工作表 // 宽度调整 ws['!cols'] = Array(data?.[0]?.length || 0).fill({ wpx: 80 }); XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); XLSX.writeFile(wb, fileName + '.xlsx'); } /** * 根据对象导出Excel * @param {Object} titleObj 标题对象 {key: '标题', key2: '标题2'} * @param {Array} dataArr 数据数组 例子 [{key: '张三', key2: '25'}, {key: '李四', key2: '30'}] * @param {String} fileName 文件名 */ export function exportExlByObj(titleObj, dataArr, fileName = '导出文件') { dataArr = Array.isArray(dataArr) ? [...dataArr] : [] /** 列表标题数组 */ const titleArr = [Object.values(titleObj)]; const sheetHead = [fileName] /** 转二维数据 */ const toNeedArr = (titleObj = {}, tableData = []) => { return tableData.map(row => { const rowArr = [] Object.keys(titleObj || {}).map(key => { const cellVal = row[key] || '' if (typeof cellVal !== 'string') String(cellVal) rowArr.push(cellVal) }) return rowArr }) } /** @param {Array} 表格数据 (二维数组) */ const tableData = toNeedArr(titleObj, dataArr); // 合并标题和数据 const finalData = [...titleArr, ...tableData]; // 合并标题 easyExport(finalData, fileName); }