2025-12-16 20:41:24 +08:00
|
|
|
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 方法将二维数组转换为工作表
|
2025-12-16 21:28:17 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 宽度调整
|
|
|
|
|
ws['!cols'] = Array(data?.[0]?.length || 0).fill({ wpx: 80 });
|
|
|
|
|
|
2025-12-16 20:41:24 +08:00
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
}
|