react 使用xlsx导出excel表格

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: '文件已自动下载到浏览器的默认下载目录下' });
 }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值