Files
sgxt_web/src/utils/exportExcel.js

51 lines
1.6 KiB
JavaScript
Raw Normal View History

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 方法将二维数组转换为工作表
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);
}