import Excel from 'exceljs';
async export(fileName, title, columns, data, fileType = 'xlsx') {
const workbook = new Excel.Workbook();
const sheet = workbook.addWorksheet(title);
const keyValueData = {};
sheet.columns = columns.map(item => {
keyValueData[item.key] = item;
return {
header: item.title,
key: item.key,
width: item.width || 100
};
});
const rows = [];
data.forEach(item => {
const obj = {};
for (const key in item) {
if (keyValueData[key]) {
const value = keyValueData[key].value ? keyValueData[key].value(item, item[key]) : item[key];
obj[key] = value;
}
}
rows.push(obj);
});
sheet.addRows(rows);
const res = await workbook[fileType].writeBuffer();
// util.blobToFile(fileName, res, fileType === 'csv'); // 如果导出乱码, 请改这里, 导出的head设置问题
this.blobToFile(fileName, res, fileType === 'csv'); // 如果导出乱码, 请改这里, 导出的head设置问题
},
/**
* blob下载文件
* @param fileName
* @param blob
*/
blobToFile(fileName, b, isUtf8) {
if (isUtf8 === true) {
b = '\uFEFF' + b;
}
const blob = new Blob([b]);
if ('download' in document.createElement('a')) { // 非IE下载
const elink = document.createElement('a');
elink.download = fileName;
elink.style.display = 'none';
if (isUtf8 === true) {
elink.href = URL.createObjectURL(blob, { type: 'text/csv;charset=utf-8' });
} else {
elink.href = URL.createObjectURL(blob);
}
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href); // 释放URL 对象
document.body.removeChild(elink);
} else { // IE10+下载
navigator.msSaveBlob(blob, fileName);
}
},
前端导出excel,yarn add exceljs
最新推荐文章于 2024-07-12 16:55:56 发布