前端接收到数据转为Excel,借助第三方包,清洗数据——转为业务数据类型

前端接收到数据转为Excel,借助第三方包

  • 如果excel的数据庞大,则需要后端配合来生成excel文件,前端只负责按接口下载即可
  • 如果业务需求只是针对当前页或者发过来的json数据不是过多,就可以在前端配合第三方库来清洗数据完成exce的下载。保存。

假如收到信息有
在这里插入图片描述
不是很多,我们业务需要就是下载;
首先点击下载的得到数据:

  • 伪代码描述业务逻辑:
const [data,setData]=useState([])

function loadExcle(data){
    、、、处理需要下载的
}

<Button>onClick={e=>{loadExcle(data)}}>下载订单</Button>

在这里插入图片描述
接下来下载插件:

yarn add xlsx

使用:导入

import {utils,writeFile} from "xlsx"
    const [data,setData]=useState([])
    function loadExcle(data){
        // data为网络请求返回来的数据【{.....}】
        let newBook = utils.book_new();//创建excel工作簿对象
        let sheet = utils.json_to_sheet(data);//json数据转为sheet单元表格信息数据
        utils.book_append_sheet(newBook,sheet,"交易订单数据信息");//添加到工作簿,单元名称
        writeFile(newBook,"load交易订单.xlsx")//下载到本地=》文件名
    }

数据的类型为:
但是为甚么没有时间的数据了呢?,这一项的数据是数组类型,value应该是String类型的,需要转化、
在这里插入图片描述
那现在就已经下载好了数据,但是看见这个表格头怎么列名是key值,不符合我们的需求:
那么我们可以想到键值对应列名,进行数据清洗,将清洗之后的json数据data转给utils.json_to_sheet(data)这样就能得到我们所需要的数据了。


在这里插入图片描述
代码描述:
对应的键值为列名的算法描述:
重新定义键值名:对象{key:value};

   function loadExcle(data){
        // data为网络请求返回来的数据
        console.log(data);
        let newBook = utils.book_new();
        let newdata = cleaner(data);//清洗数据
        let sheet = utils.json_to_sheet(newdata);
        utils.book_append_sheet(newBook,sheet,"交易订单数据信息");
        writeFile(newBook,"load交易订单.xlsx")
    }
    function cleaner(data=[]){
        let dataKey = {
            key:"序号",
            name:"用户名",
            id:"订单号",
            after:"备注",
            number:"数量",
            payfor:"商店名称",
            price:"价格",
            state:"付款状态",
            time:"时间",
            types:"支付类型"

        } 
        let newdata=[]//转化后的数据
        data.forEach((item)=>{
            let temp = {}//临时存储新的数据对象
            for(let key in item){
                temp[dataKey[key]] =  typeof item[key] == "string"?item[key]:String(item[key]);//转化数据类型
            }
            newdata.push(temp);//添加到新的数组里
            temp = null//避免内存泄漏
        })
        return newdata;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢*牛牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值