Vue xlsx导出Excel

本文介绍了如何在前端使用Vue结合xlsx库来实现Excel文件的导出。通过安装xlsx库,创建导出函数,并在需要导出的地方调用该函数,将数据传入。特别提醒,数据中存在null值可能导致文件损坏。

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

前端做导出,现在应该比较普遍了,最近用了npm的xlsx库
安装:npm install --save xlsx
下面看下操作步骤:
1.写一个专门导出的文件

import XLSX from 'xlsx';

/**
 * 导出Excel的处理函数--针对table
 * @param {Array} headers: [{key: 'date', title: '日期'}, {key: 'name', title: '名称'}]
 * @param {Array} data   : [{date: '2019-05-31', name: 'megen.huang'}, {date: 'name', name: '小明'}]
 * @param {String} fileName: '导出结果.xlsx'
 * */
export default function ExportExcel(headers, data, fileName = '导出结果.xlsx') {
    const _headers = headers
        .map((item, i) => Object.assign({}, { key: item.key, title: item.title, position: String.fromCharCode(65 + i) + 1 }))
        .reduce((prev, next) => Object.assign({}, prev, { [next.position]: { key: next.key, v: next.title } }), {});

    const _data = data
        .map((item, i) => headers.map((key, j) => Object.assign({}, { content: item[key.key], position: String.fromCharCode(65 + j) + (i + 2) })))
        // 对刚才的结果进行降维处理(二维数组变成一维数组)
        .reduce((prev, next) => prev.concat(next))
        // 转换成 worksheet 需要的结构
        .reduce((prev, next) => Object.assign({}, prev, { [next.position]: { v: next.content } }), {});

    // 合并 headers 和 data
    const output = Object.assign({}, _headers, _data);
    // 获取所有单元格的位置
    const outputPos = Object.keys(output);
    // 计算出范围 ,["A1",..., "H2"]
    const ref = `${outputPos[0]}:${outputPos[outputPos.length - 1]}`;

    // 构建 workbook 对象
    const wb = {
        SheetNames: ['mySheet'],
        Sheets: {
            mySheet: Object.assign(
                {},
                output,
                {
                    '!ref': ref,
                    // eslint-disable-next-line
                    '!cols': headers.map(item => ({wpx: 100}))
                }
            )
        }
    };

    // 导出 Excel
    XLSX.writeFile(wb, fileName);
}

2.在要导出的文件里引入这个函数

import ExportExcel from '../../utils/exportExcel';

3.调用这个方法,把参数传进去

const dataSource = result.data.data.tableData.map(item => {
    Object.keys(item).forEach(key => {
        // 后端传null node写入会有问题
        if (item[key] === null) {
            item[key] = '';
        }

        if (Array.isArray(item[key])) {
            item[key] = item[key].join(',');
        }
    });
    return item;
});
const columns = result.data.data.columns.map(item => ({key: item.prop, title: item.label}));

ExportExcel(columns, dataSource, `${new Date().getTime().toString()}_导出.xlsx`);

注意:导入数据里有null会导致文件损坏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值