纯前端实现下载excel功能

<template>
  <div>
    <button id="btn" @click="handlerClick">下载</button>
  </div>
</template>
<script>
export default {
    data() {
        return {
            header: [
                { key: "order", title: "序号" },
                { key: "name", title: "姓名" },
                { key: "age", title: "年龄" },
                { key: "height", title: "身高" },
                { key: "address", title: "地址" },
            ],
            content: [
                {
                    order: 1,
                    name: "Abby",
                    age: 23,
                    height: 168,
                    address: "北京,中关村",
                },
                {
                    order: 2,
                    name: "Leo",
                    age: 28,
                    height: 183,
                    address: "上海,陆家嘴",
                },
                {
                    order: 3,
                    name: "Alen",
                    age: 35,
                    height: 178,
                    address: "深圳,南山区",
                },
                {
                    order: 4,
                    name: "Daisy",
                    age: 27,
                    height: 160,
                    address: "广州,天河区",
                },
            ]
        }
    },
    methods: {
        handlerClick(){
            this.downloadCsv(this.header,this.content,'人员信息表')
        },
        /**
        * @description 纯前端实现将表格数据导出为csv格式文件
        * @param {Array} headers 表格头配置项,headers中的key值与data中每一个item的属性名一一对应
        * @param {Array} data 表格数据
        * @param {String} fileName 导出的文件名称
        */
        downloadCsv(header, data, fileName = "导出结果.csv") {
        if (!header || !data|| !Array.isArray(header) || !Array.isArray(data) || !header.length || !data.length) {
            return;
        }
        var csvContent = 'data:text/csv;charset=utf-8,\ufeff';
        const _header = header.map(h => h.title).join(",");
        const keys = header.map(item => item.key);
        csvContent += _header + '\n';
        data.forEach((item, index) => {
            let dataString = '';
            for (let i = 0; i < keys.length; i++) {
            dataString += item[keys[i]] + ',';
            }
            csvContent += index < data.length ? dataString.replace(/,$/, '\n') : dataString.replace(/,$/, '');
        });
        const a = document.createElement('a');
        a.href = encodeURI(csvContent);
        a.download = fileName;
        a.click();
        window.URL.revokeObjectURL(csvContent);
        }
    }
}
</script>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@前端小菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值