vue2.0下 导出excel设置多个sheet页

记录一下vue2.0下 导出excel设置多个sheet页

首先安装依赖

npm install xlsx@0.17.0 --save 
npm install file-saver@2.0.5 --save

其次在要用的地方引入一下

import fileSaverfrom 'file-saver'
import XLSX from 'xlsx'

最后在页面使用

<template>
  <div id="app">
      <el-button type="success" @click="onexcel">导出excel</el-button>
</template>
<script>
import fileSaverfrom 'file-saver'
import XLSX from 'xlsx'
export default {
  methods: {
    //需要导出的JSON数据
    onexcel() {
      const data = {

        '基本信息': this.baseData(),

        '历史信息 ': this.history1(),

      };

      let columnHeaders = {

        '基本信息': {

          'data0': '主管单位或镇街道',

          'data1': '单位',

          'data2': '分管领导',

          'data3': '职务',

          'data4': '固定电话',

          'data5': '移动电话',

          'data6': '任职时间',

        },

        '分管领导历史': {

          'extra': '主管单位或镇街道',

          'data0': '单位',

          'data1': '分管领导',

          'data2': '职务',

          'data3': '固定电话',

          'data4': '移动电话',

          'data5': '任职时间',

          'data6': '离职时间'

        },

      }

      let wscols = [{ wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }, { wch: 12 }];//设置字段宽度

      let sheetNames = [];

      let sheetsList = {};

      const wb = XLSX.utils.book_new();



      for (let key in data) {

        sheetNames.push(key);

        let columnHeader = columnHeaders[key] // 此处是每个sheet的表头

        let temp = this.transferData(data[key], columnHeader);

        sheetsList[key] = XLSX.utils.aoa_to_sheet(temp);

        sheetsList[key]["!cols"] = wscols;

      }



      wb["SheetNames"] = sheetNames;

      wb["Sheets"] = sheetsList;



      XLSX.writeFile(wb, "通讯录.xlsx");

    },



    transferData(data, columnHeader) {

      let content = [], header = [];

      for (let i in columnHeader) {

        header.push(columnHeader[i])

      }

      content.push(header);

      data.forEach((item, index) => {

        let arr = [];

        for (let i in columnHeader) {

          arr.push(item[i])

        }

        content.push(arr);

      });

      return content;

    },
    baseData() {

      return [

        {

          data0: '虹桥街道',

          data1: '大数据中心',

          data2: '吴',

          data3: '副主任',

          data4: '025-88888888',

          data5: '13000000000',

          data6: '2019-12-14',

        }, {

          data0: '崇川街道',

          data1: '大数据中心',

          data2: '成',

          data3: '科长',

          data4: '025-88888888',

          data5: '13000000000',

          data6: '2019-11-14',

        },

      ];

    },



    history1() {

      return [

        { extra: '虹桥街道', data0: '张', data1: '主任', data2: '025-88888888', data3: '13000000000', data4: '2019-11-14', data5: '2019-12-14' },

        { extra: '虹桥街道', data0: '吴', data1: '副主任', data2: '025-88888888', data3: '13000000000', data4: '2019-12-14', data5: '' },

        { extra: '虹桥街道', data0: '吴', data1: '副主任', data2: '025-88888888', data3: '13000000000', data4: '2019-12-14', data5: '' },

        { extra: '文峰街道', data0: '王', data1: '主任', data2: '025-88888888', data3: '13000000000', data4: '2019-10-14', data5: '2019-11-14' },

        { extra: '文峰街道', data0: '成', data1: '科长', data2: '025-88888888', data3: '13000000000', data4: '2019-11-14', data5: '' },
      ];
    },
  },
}
</script>
 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值