js使用xlsx生成二进制文件用于上传(不下载)

业务中经常会处理各种数据,本文介绍了前端通过 xlsx 库将数据转换为 excel 文件用于上传的实现。

import * as XLSX from "xlsx";  // 此代码使用版本 0.18.5

interface ObjectAny {
    [key: string]: any;
}

const exportExcelNoDownload = (headers: string[][], data: ObjectAny[]): File => {
    const headerWs = XLSX.utils.aoa_to_sheet(headers);
    const ws = XLSX.utils.sheet_add_json(headerWs, data, {skipHeader: true, origin: 'A2'});
    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, 'sheet1');
    const fileData = XLSX.write(wb, {type: 'array', compression: true});  // compression 能有效减少文件体积,便于上传
    const newFile = new File([fileData], 'text.xlsx');
    return newFile;
}

// 本地测试一下生成的文件是否正常
const test = () => {
    const headers = [['国家', '城市']];
    const data = [
        {'国家': 'china', '城市': 'shenzhen'},
        {'国家': 'china', '城市': 'guangzhou'},
        {'国家': 'USA', '城市': 'newyork'},
    ];
    const file = exportExcelNoDownload(headers, data);
    const tmpLink = document.createElement("a");
    const objectUrl = URL.createObjectURL(file);

    tmpLink.href = objectUrl;
    tmpLink.download = file.name;
    document.body.appendChild(tmpLink);
    tmpLink.click();

    document.body.removeChild(tmpLink);
    URL.revokeObjectURL(objectUrl);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值