1、安装xlsx
npm install xlsx
2、封装导出函数
// import * as XLSX from 'xlsx';
function jsonToArray (key, jsonData) {
return jsonData.map(v =>
key.map(j => {
return v[j];
})
);
}
function autoWidthFunc (ws, data) {
// set worksheet max width per col
const colWidth = data.map(row =>
row.map(val => {
// if null/undefined
if (val == null) {
return { wch: 10 };
} else if (val.toString().charCodeAt(0) > 255) {
// if chinese
return { wch: val.toString().length * 2 };
} else {
return { wch: val.toString().length };
}
})
);
// start in the first row
const result = colWidth[0];
for (let i = 1; i < colWidth.length; i++) {
for (let j = 0; j < colWidth[i].length; j++) {
if (result[j].wch < colWidth[i][j].wch) {
result[j].wch = colWidth[i][j].wch;
}
}
}
ws['!cols'] = result;
}
const exportExcel = ({ key, data, title, filename, autoWidth }) => {
import('xlsx').then(XLSX => {
const wb = XLSX.utils.book_new();
data.forEach(item => {
const arr = jsonToArray(key, item.sheetData);
arr.unshift(title);
const ws = XLSX.utils.aoa_to_sheet(arr);
if (autoWidth) {
autoWidthFunc(ws, arr);
}
XLSX.utils.book_append_sheet(wb, ws, item.sheetName);
});
XLSX.writeFile(wb, filename + '.xlsx');
});
};
export default exportExcel;
3、使用
import {exportExcel} from '@/utils/exportExcel.js'
handleExportExcel() {
// 字段 title,key 需要一一对应
const params = {
title: ['名称','年龄'],
key: ['name','age'],
data:arr, // 数据源
autoWidth: true, //autoWidth等于true,那么列的宽度会适应那一列最长的值
filename: '', // 文件名自己定义
};
exportExcel(params) ;
}