react 使用第三方插件xlsx完成前端下载表格(后端返回数据为数组)

因npm官网示例不全,为方便使用贴出详细示例。
1、download.ts 工具函数封装

import * as XLSX from 'xlsx';
import { message } from 'antd';
import { format } from '@/utils/common';
export function xlsxDownload(list: any, columnsData: any) {
  console.log(list, columnsData);
  const rows = [];
  if (list.length > 0) {
    for (let i = 0; i < list.length; i++) {
      const rowObj = {};
      for (let obj in columnsData) {
        let heardName = columnsData[obj].title;
        const rowObjDetails = list[i];
        rowObj[heardName] = rowObjDetails[obj];
      }
      rows.push(rowObj);
    }
  }
  if (rows && rows.length > 0) {
    const sheet = XLSX.utils.json_to_sheet(rows);
    // const rowCount = rows.length;
    const colCount = Object.keys(rows[0]).length;
    sheet['!cols'] = new Array(colCount);
    // const rowAll = XLSX.utils.decode_range(sheet['!ref']);
    const nowData = new Date();
    const defaultNowData = format(nowData, 'yyyy-MM-dd');
    console.log(defaultNowData);
    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, sheet, '任务明细');
    XLSX.writeFile(wb, `${defaultNowData}.xlsx`, { compression: true });
  } else {
    message.warning('无数据可导出');
  }
}

2、食用方法,请求接口调用使用的umi框架可自行替换
 

import { xlsxDownload } from '@/utils/download'

  //下载表格表头数据
  const columnsData = {
    taskId: { title: '任务ID' },
    taskName: { title: '任务名称' },
    taskSource: { title: '任务来源' },
  }

  //导出 xlsx格式下载
  const showModal = () => {
    Modal.confirm({
      title: '下载提示',
      content: <>确认下载?</>,
      async onOk () {
        const formValue = formRefOut.current?.getFieldsValue()
        console.log(formValue, 'formValue----')
        const { list: downloadData } = await dispatch?.({
          type: 'indexManageModel/getTaskTableListAllList',
          payload: { current: 1, pageSize: 9999 },
        })
        xlsxDownload(downloadData, columnsData)
      },
    })
  }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值