Vue中封装xlsx到处excel文件的方法

首先需要安装xlsx与element-ui

npm install xlsx
npm install element-ui

将js代码封装到js文件中,并且导出函数,使用时需要传入fileName与data

let fileName = "test";
let data = [
    {
        序号: 1,
        测试数据: "test1",
        时间: "2022年8月16日"
    },
    {
        序号: 2,
        测试数据: "test2",
        时间: "2022年8月16日"
    },
];
exportExcelFile(fileName, data);
import XLSX from "xlsx"
import { Message } from "element-ui"

export function exportExcelFile(fileName, data) {
    var worksheet = XLSX.utils.json_to_sheet(data);

    // 调整宽度
    let wscols = [];
    let keyValueData = _getKeyValueData(data);  // 获取Key对应Value的数据
    for (let key in keyValueData) { // 循环数据,并获取对应的宽度,并放入到wscols中
        let width = _getExcelWidth(keyValueData[key]);
        wscols.push({ wch: width });
    }
    worksheet["!cols"] = wscols;

    // 新建空workbook,然后加入到worksheet
    var workbook = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(workbook, worksheet, "result");

    // 生成xlsx文件
    Message.success("正在下载");
    let name = `${fileName}.xlsx`;
    XLSX.writeFile(workbook, name);
}

获取key对应Value的数据,例如:{ id: [1,2,3], name: [“lisa”, “john”, “james”]}


// 获取key对应Value的数据,例如:{ id: [1,2,3], name: ["lisa", "john", "james"]}
function _getKeyValueData(data) {
    let keyValueData = {};
    let keys = Object.keys(data[0]);    // 获取所有key的名字

    for (let key of keys) { // 循环key的名字
        for (let item of data) {    // 循环传入的数据
            if (keyValueData[key]) {    // 如果有对应的key,则放入list中,否则创建list
                keyValueData[key].push(item[key]);
            } else {
                keyValueData[key] = [item[key]];
            }
        }
    }
    return keyValueData;
}

根据数据获取Excel表的宽度


// 根据数据获取Excel表的宽度
function _getExcelWidth(dataList) {
    let maxLength = 0;
    for (let item of dataList) {
        item = item.toString();
        if (item.length > maxLength) maxLength = item.length;
    }

    maxLength += 2; // 宽度增加2,可以更美观
    if (maxLength < 10) maxLength = 10;
    if (maxLength > 40) maxLength = 40;
    return maxLength;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值