xlsx结合FileSaver将elementUI的el-table所展示内容导出excel

89 阅读1分钟

xlsx结合FileSaver将elementUI的el-table所展示内容导出excel

1. 安装

npm install xlsx file-saver

2. 引入

import * as XLSX from 'xlsx'; import FileSaver from 'file-saver';

3. 给el-table绑定数据,且绑定id,来获取DOM

    <el-table
        id="tableId"
        v-loading="loading"
        :showPagination="false" 
        :data="pageData" 
        highlight-current-row
        :max-height="tableHeight"
        border
    >
        <el-table-column 
            v-for="(item, index) in columnsowner" 
            :prop="item.prop"
            :label="item.label"
            :width="item.width"
            align="center"
        >
        </el-table-column>
    </el-table>

4. 导出方法

    exportExcel() {        
        var xlsxParam = { raw: true } //转换成excel时,使用原始的格式
        let fix = document.querySelector(".el-table__fixed");
        let wb;
        //判断有无fixed定位,如果有的话,先去掉,后面再加上,不然导出的数据会重复
        if (fix) {
            // 创建一个工作薄
            wb = XLSX.utils.table_to_book(
                document.querySelector("#tableId").removeChild(fix), xlsxParam
            );
            document.querySelector("#tableId").appendChild(fix);
        } else {
            wb = XLSX.utils.table_to_book(document.querySelector("#tableId"), xlsxParam);
        }
        
        // XLSX从数据生成电子表格字节(文件)
        let wbout = XLSX.write(wb, {
            bookType: "xlsx",
            bookSST: true,
            type: "array",
        });

        // 使用FileSaver将字节文件保存本地
        try {
            FileSaver.saveAs(
            new Blob([wbout], { type: "application/octet-stream" }),
            "木片检验结果.xlsx"
            );
        } catch (e) {
            if (typeof console !== "undefined") console.log(e, wbout);
        }
        
        return wbout;
    }