element-ui 导出table中的数据并下载到本地|方法2(可设定导出的表格格式)-实测可行

element-ui 导出table中的数据并下载到本地|方法2(可设定导出的表格格式)-实测可行

1.安装依赖:

npm install xlsx xlsx-style

2.js文件的内容,直接复制粘贴到js文件即可

import * as XLSX from 'xlsx';
import XLSXStyle from 'xlsx-style';


export function createWs(data, fields, titles) {
    const ws = XLSX.utils.json_to_sheet(data, {
        header: fields,
    });

    /*const = merges: [
        // 合并所需的单元格 我这个导出中没有用到 就没用 视业务而定
        { s: { r: 0, c: 2 }, e: { r: 0, c: 5 } },
        { s: { r: 0, c: 0 }, e: { r: 1, c: 0 } },
        { s: { r: 0, c: 1 }, e: { r: 1, c: 1 } },
        { s: { r: 0, c: 6 }, e: { r: 1, c: 6 } },
        { s: { r: 0, c: 7 }, e: { r: 1, c: 7 } },
        { s: { r: 0, c: 8 }, e: { r: 1, c: 8 } },
        { s: { r: 0, c: 9 }, e: { r: 1, c: 9 } },
        { s: { r: 0, c: 10 }, e: { r: 1, c: 10 } },
        { s: { r: 0, c: 11 }, e: { r: 1, c: 11 } },
        { s: { r: 0, c: 12 }, e: { r: 1, c: 12 } },
        { s: { r: 0, c: 13 }, e: { r: 1, c: 13 } },
        { s: { r: 0, c: 14 }, e: { r: 1, c: 14 } },
        { s: { r: 0, c: 15 }, e: { r: 1, c: 15 } },
        { s: { r: 0, c: 16 }, e: { r: 1, c: 16 } },
        { s: { r: 0, c: 17 }, e: { r: 1, c: 17 } },
    ],
    ws['!merges'] = merges;*/


    ws['!cols'] = [ //设置表格的宽度
        {
            wpx: 30,
        },
        {
            wpx: 50,
        },
        {
            wpx: 150,
        },
        {
            wpx: 50,
        },
        {
            wpx: 120,
        },
        {
            wpx: 80,
        },
        {
            wpx: 80,
        },
        {
            wpx: 90,
        },
        {
            wpx: 90,
        },
        {
            wpx: 200,
        },
        {
            wpx: 80,
        },
        {
            wpx: 200,
        },
    ];

    const range = XLSX.utils.decode_range(ws['!ref']);

    // 设置表格样式
    for (let i = range.s.c; i < range.e.c + 1; i++) {
        for (let j = range.s.r; j < range.e.r + 1; j++) {
            let cell_address = {
                c: i,
                r: j,
            };
            let column = XLSX.utils.encode_cell(cell_address);
            ws[column].s = {
                font: {
                    name: '宋体',
                    sz: 10,
                    color: {
                        auto: 1,
                    },
                },
                border: {
                    color: {
                        auto: 1,
                    },
                    top: {
                        style: 'thin',
                    },
                    bottom: {
                        style: 'thin',
                    },
                    left: {
                        style: 'thin',
                    },
                    right: {
                        style: 'thin',
                    },
                },
                alignment: {
                    /// 自动换行
                    wrapText: 1,
                    // 居中
                    horizontal: 'center',
                    vertical: 'center',
                    indent: 0,
                },
            };
        }
    }
    //设置中文标题 因为后台返回的数据中属性只能以英文返回 所以需要转化为中文
    for (let c = range.s.c; c <= range.e.c; c++) {
        const header = XLSX.utils.encode_col(c) + '1';
        ws[header].v = titles[ws[header].v];
    }
    return ws;
}

// 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
export function sheet2blob(sheet, sheetName) {
    sheetName = sheetName || 'sheet1';
    var workbook = {
        SheetNames: [sheetName],
        Sheets: {},
    };
    workbook.Sheets[sheetName] = sheet; // 生成excel的配置项

    // 下载这里一定要用 xlsx-style 的write() 方法才可以使导出excel表格带样式
    var wbout = XLSXStyle.write(workbook, { type: 'buffer' });
    var blob = new Blob([wbout], {
        type: 'application/octet-stream',
    }); // 字符串转ArrayBuffer

    return blob;
}

export function openDownloadDialog(url, saveName) {
    if (typeof url == 'object' && url instanceof Blob) {
        url = URL.createObjectURL(url); // 创建blob地址
    }
    var aLink = document.createElement('a');
    aLink.href = url;
    aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
    var event;
    if (window.MouseEvent) event = new MouseEvent('click');
    else {
        event = document.createEvent('MouseEvents');
        event.initMouseEvent(
            'click',
            true,
            false,
            window,
            0,
            0,
            0,
            0,
            0,
            false,
            false,
            false,
            false,
            0,
            null
        );
    }
    aLink.dispatchEvent(event);
}


3.vue中导出并下载的函数调用

                const titles = {
                    num: "序号",
                    env: "环境",
                    waybillNumber: "单号",
                    packageNumber: "数量",
                    feeName: "名称",
                    feeCode: "编码",
                    financeStatus: "状态",
                    feeAmount_fms: "财务金额",
                    feeAmount_pda: "PDA金额",
                    fee_source: "来源",
                    checkResult: "结果",
                    remark: "备注"
                }
                const fields = ['num', 'env', 'waybillNumber', 'packageNumber', 'feeName', 'feeCode', 'financeStatus',
                    'feeAmount_fms', 'feeAmount_pda', 'fee_source', 'checkResult', 'remark',
                ];
                const ws = createWs(
                        this.tableData, // 后台返回的json数据
                        fields,
                        titles
                )
                openDownloadDialog(sheet2blob(ws), '导出数据.xlsx')

 导出时可自定义文件名

其他方法参考这里:

element-ui 导出table中的数据并下载到本地|方法1-实测可行_幸福的达哥的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Element UITable组件可以支持树形数据展示,通过设置tree属性为true即可开启树形模式。同时需要设置row-key属性为每个节点的唯一标识符,以便于组件进行数据更新和渲染。 在树形模式下,Table组件会自动根据数据的层级关系进行缩进和展开。同时,可以通过设置expand-row-keys属性来控制默认展开的节点,或者通过toggleRow方法来动态展开或收起某个节点。 在数据,每个节点需要包含以下属性:label(节点名称)、children(子节点数组)、isLeaf(是否为叶子节点)。其,isLeaf属性可以不设置,组件会自动判断是否为叶子节点。 除此之外,Table组件还提供了一些相关的事件和插槽,可以实现更加灵活的树形数据展示和交互效果。 ### 回答2: element-uitable树形数据是指可以将数据以树形结构展示在table组件。这种展示方式通常用于层级结构数据。在element-ui,通过在table组件设置tree属性,可以实现树形数据的显示。 table树形数据的基本结构是父节点和子节点。每一个节点都有一个唯一的标识符,用于查找父子关系。在父节点,通过设置children属性指定其子节点,而在子节点,通过设置parent属性指定其父节点。在加载数据时,需要对数据进行递归遍历,将父子节点关系构建好,然后将结果赋给table的data属性。 在table树形数据,需要注意以下几点: 1. 节点的展开和折叠:可以通过设置expand-row-keys属性或调用toggleRowExpansion方法来控制节点的展开和折叠。 2. 节点的渲染:可以通过设置scoped slot custom-tree-node来自定义节点的渲染方式,包括节点的文字和图标等。 3. 节点的选择:可以通过设置show-checkbox属性和使用el-checkbox组件来实现节点的选择。 4. 节点的过滤和搜索:可以通过设置filter-method属性和search属性,来实现节点的过滤和搜索。 总之,通过使用element-uitable树形数据,可以方便地展示层级结构数据,提高数据的可读性和易用性。同时,需要注意对数据的递归遍历和节点的展开、渲染、选择等问题的处理。 ### 回答3: element-ui是一个非常好用的基于Vue框架的UI组件库,其包含了丰富的组件,简化了前端开发工作,使得前端开发变得更加快速、高效。其table组件是element-ui较为重要的组件之一,能够实现表格的展示、排序、筛选、分页等功能。而table组件的树形数据展示则是在实际项目经常使用的功能之一。 element-uitable组件,通过设置“tree-props”属性来实现树形数据展示。这个属性会接收一个对象,对象需要设置两个属性——“children”和“hasChildren”。其,“children”用来设置子节点的属性名,而“hasChildren”用来设置判断该节点是否有子节点的方法。如果“hasChildren”返回true,则该节点展示为可展开状态;如果“hasChildren”返回false,则该节点展示为不可展开状态。在设置完“tree-props”属性后,还需要将“type”设置为“tree”,以告诉table组件进行树形数据展示。 除此之外,element-uitable组件还提供了以下的常用功能: 1.行的展开与折叠——通过设置“expand-row-keys”属性,可以指定哪些行是展开的。通过设置“row-key”属性,配合“expand-change”事件,可以获得行的展开折叠状态。 2.行拖拽排序——通过设置“row-draggable”属性和“row-drop”事件,可以实现行的拖拽排序。 3.树形数据节点拖拽——通过设置“tree-props”属性的“draggable”属性和“node-drag-*”事件,可以实现树形数据节点的拖拽排序。 总之,在element-uitable组件,树形数据的展示与交互非常方便,通过合理的设置,可以实现非常丰富的功能。希望这篇回答能够对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

《代码爱好者》

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

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

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

打赏作者

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

抵扣说明:

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

余额充值