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

该文章展示了如何利用JavaScript中的xlsx库将数据转换为Excel格式的文件,通过接口aoa_to_sheet和sheet_add_json处理headers和data,然后通过book_new和book_append_sheet创建工作簿。文件通过write方法以数组类型和压缩选项写入,最后生成可用于下载的File对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务中经常会处理各种数据,本文介绍了前端通过 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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值