import XLSX from 'xlsx'; // 引入
exportExcel = async () => {
let exportData = [];
// selectedRowKeys为勾选数据,根据selectedRowKeys筛选需要导出的数据
await this.requestChooseAllData({ limit: -1 });
exportData = this.state.chooseAllDataSource;
const newData = exportData.filter(
(val) => { return this.state.selectedRowKeys.indexOf(val.error_id) > -1; }
);
const dataArray = [];
const excelHeaderRow = {};
const headerIndexes = [];
const colProps = [];
this.columns.forEach((item) => {
excelHeaderRow[item.dataIndex] = item.title;
headerIndexes.push(item.dataIndex);
const { width } = item;
if (width) {
colProps.push({ wpx: 100 });
} else {
colProps.push(undefined);
}
});
dataArray.push(excelHeaderRow); // 头部标题
let index = 1;
newData.forEach((item) => {
// 序号值修改
// eslint-disable-next-line no-param-reassign
item.id = index;
index += 1;
// 处理状态修改
const newItem = this.state.statusData.find(
innerItem => innerItem.enum_code === item.treated_status
);
// eslint-disable-next-line no-param-reassign
item.treated_status = newItem.enum_val;
// 错误原因修改
const newItem1 = this.state.errorReasonData.find(
innerItem1 => innerItem1.enum_code === item.error_cause
);
// eslint-disable-next-line no-param-reassign
item.error_cause = newItem1 ? newItem1.enum_val : '';
const rowData = {};
this.columns.forEach((col) => {
rowData[col.dataIndex] = item[col.dataIndex];
});
dataArray.push(rowData); // 需要导出的数据
});
const date = (`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`).toString();
const ws = XLSX.utils.json_to_sheet(dataArray, { header: headerIndexes, skipHeader: true });//将json对象数组转化成工作表
ws['!cols'] = colProps; // 设置每一列的宽度
const wb = XLSX.utils.book_new(); // 创建一个新的工作簿对象
XLSX.utils.book_append_sheet(wb, ws, 'data');
XLSX.writeFile(wb, `${this.state.title}_${date}.xlsx`);
notification.success({ message: '导出成功!', description: '文件已自动下载到浏览器的默认下载目录下' });
}
react 使用xlsx导出excel表格
最新推荐文章于 2024-05-06 15:15:00 发布