当前位置 博文首页 > q1424966670的博客:vue导出Excel(三)

    q1424966670的博客:vue导出Excel(三)

    作者:[db:作者] 时间:2021-08-27 18:47

    接上篇文章,需要用到Export2Excel、Blob等js文件????????提取码:s8ci

    下面demo是把table的json数据导出为多个sheet的Excel,同时也是支持自定义列导出

    ?找到Export2Excel.js,把下面代码复制到最后即可

    export function export_json_to_excel_in_sheet(jsonData, defaultTitle) {
        var wb = new Workbook();
        for(let i=0;i<jsonData.length;i++){
            var ws_name = jsonData[i].sheetName;
            var ws = sheet_from_array_of_arrays(jsonData[i].data);
            wb.SheetNames.push(ws_name);
            wb.Sheets[ws_name] = ws;
        }
        var wbout = XLSX.write(wb, {
            bookType: 'xlsx',
            bookSST: false,
            type: 'binary'
        });
        var title = defaultTitle || '列表'
        saveAs(new Blob([s2ab(wbout)], {
            type: "application/octet-stream"
        }), title + ".xlsx")
    }

    ?下面是demo,复制即可运行

    <template>
      <div>
        <el-button type="primary" @click="export2Excel()">导出Excel</el-button>
      </div>
    </template>
     
    <script>
    export default {
      components: {},
      data() {
        return {
            jsonData: [],
            tableData: [
                { index: 0, username: "张三", password: 333, age: 22 },
                { index: 1, username: "李四", password: 444, age: 23 },
            ],
            tableData2: [
                {date: "2016-05-02",name: "王小虎",address: "上海市普陀区金沙江路 1518 弄",},
                {date: "2016-05-04",name: "王小虎",address: "上海市普陀区金沙江路 1517 弄",},
                {date: "2016-05-01",name: "王小虎",address: "上海市普陀区金沙江路 1519 弄",},
                {date: "2016-05-03",name: "王小虎",address: "上海市普陀区金沙江路 1516 弄",},
            ],
            tableData3: [
                {key: '1',name: 'John Brown',age: 32,tel: '0571-22098909',phone: 18889898989,address: 'New York No. 1 Lake Park',},
                {key: '2',name: 'Jim Green',tel: '0571-22098333',phone: 18889898888,age: 42,address: 'London No. 1 Lake Park',},
                {key: '3',name: 'Joe Black',age: 32,tel: '0575-22098909',phone: 18900010002,address: 'Sidney No. 1 Lake Park',},
                {key: '4',name: 'Jim Red',age: 18,tel: '0575-22098909',phone: 18900010002,address: 'London No. 2 Lake Park',},
                {key: '5',name: 'Jake White',age: 18,tel: '0575-22098909',phone: 18900010002,address: 'Dublin No. 2 Lake Park',},
            ],
            tableData4: [
                {"id": "10001","username": "杜甫","email": "test@email.com","sex": "男","city": "浙江杭州","sign": "人生恰似一场修行","experience": "116","ip": "192.168.0.8","logins": "108","joinTime": "2016-10-14"},
                {"id": "10002","username": "李白","email": "test@email.com","sex": "男","city": "浙江杭州","sign": "人生恰似一场修行","experience": "12","ip": "192.168.0.8","logins": "106","joinTime": "2016-10-14","LAY_CHECKED": true},
                {"id": "10003","username": "王勃","email": "test@email.com","sex": "男","city": "浙江杭州","sign": "人生恰似一场修行","experience": "65","ip": "192.168.0.8","logins": "106","joinTime": "2016-10-14"},
                {"id": "10004","username": "贤心","email": "test@email.com","sex": "男","city": "浙江杭州","sign": "人生恰似一场修行","experience": "666","ip": "192.168.0.8","logins": "106","joinTime": "2016-10-14"},
                {"id": "10005","username": "贤心","email": "test@email.com","sex": "男","city": "浙江杭州","sign": "人生恰似一场修行","experience": "86","ip": "192.168.0.8","logins": "106","joinTime": "2016-10-14"},
                {"id": "10006","username": "贤心","email": "test@email.com","sex": "男","city": "浙江杭州","sign": "人生恰似一场修行","experience": "12","ip": "192.168.0.8","logins": "106","joinTime": "2016-10-14"},
                {"id": "10007","username": "贤心","email": "test@email.com","sex": "男","city": "浙江杭州","sign": "人生恰似一场修行","experience": "16","ip": "192.168.0.8","logins": "106","joinTime": "2016-10-14"},
                {"id": "10008","username": "贤心","email": "test@email.com","sex": "男","city": "浙江杭州","sign": "人生恰似一场修行","experience": "106","ip": "192.168.0.8","logins": "106","joinTime": "2016-10-14"}
            ],
        };
      },
        methods: {
            export2Excel() {
                this.jsonData = [];
                require.ensure([], () => {
                    const {export_json_to_excel_in_sheet} = require("@/excel/Export2Excel");
                    this.assemblyData(["索引", "用户名", "密码"],["index", "username", "password"],this.tableData,"模拟数据");
                    this.assemblyData(["日期", "名称", "地址"],["date", "name", "address"],this.tableData2,"element数据");
                    this.assemblyData(["索引", "用户名", "年龄", "电话", "手机", "地址"],["key", "name", "age", "tel", "phone", "address"],this.tableData3,"antdDesign数据");
                    this.assemblyData(["索引", "用户名", "邮箱", "性别", "城市", "签名", "积分", "IP", "加入时间"],["id", "username", "email", "sex", "city", "sign", "experience", "ip", "joinTime"],this.tableData4,"layui数据");
                    export_json_to_excel_in_sheet(this.jsonData, "用户列表");
                });
            },
            /**
             * 加入一个sheet调用此方法一次
             * fieldName    列名
             * filterVal    每列对应key
             * tableData    表格的json数组数据
             * sheetName    当前sheet的名称
             */
            assemblyData(fieldName,filterVal,tableData,sheetName){
                let json = {sheetName};
                let data = tableData.map((v) => filterVal.map((j) => v[j]));
                data.unshift(fieldName);
                json.data = data;
                this.jsonData.push(json) 
            }
        },
    };
    </script>
     
    <style lang="scss" scoped>
    </style>

    ?

    cs