vue结合elementui导出单个sheet的xlsx 或多个sheet的xlsx

1.先安装依赖xlsx和 file-saver

npm install --save xlsx file-saver

2.在需要的组件内引入

import FileSaver from “file-saver”;
import XLSX from “xlsx”

如果提示xlsx 引入不到, "export ‘default’ (imported as ‘XLSX’) was not found in ‘xlsx’

请使用:

import * as XLSX from ‘xlsx’

3,导出单个sheet的xlsx,完整代码

     //导出表格
    //按钮绑定此方法触发导出功能
    exportTable(){
    
    
       //要导出的xlsx命名,要导出表格的id
       this.exportExcelFn('数据概览', '#table');
    },
    exportExcelFn(excelName,elementName) {
    
    
       /* 从表生成工作簿对象 */
        var wb = XLSX.utils.table_to_book(document.querySelector(`${
      
      elementName}`));
        /* 获取二进制字符串作为输出 */
        var wbOut = XLSX.write(wb, {
    
    
          bookType: 'xlsx',
          bookSST: true,
          type: 'array',
        });
        try {
    
    
          FileSaver.saveAs(
            //Blob 对象表示一个不可变、原始数据的类文件对象。
            //Blob 表示的不一定是JavaScript原生格式的数据。
            //File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
            //返回一个新创建的 Blob 对象,其内容由参数中给定的数组串联组成。
            new Blob([wbOut], {
    
     type: 'application/octet-stream' }),
            //设置导出文件名称
            `${
      
      excelName}.xlsx`
          );
        } catch (e) {
    
    
          if (typeof console !== 'undefined') console.log(e, wbOut);
        }
        return wbOut;
    }

4,导出多个sheet 的单个xlsx主要代码


      //导出所有表格多个sheet合并到一个excel
      exportInfos(){
    
    
        var xlsxParam = {
    
    
          raw: true
        }; //转换成excel时,使用原始的格式,这样导出的时候数字过长不会变成科学计数法
        let workbook = XLSX.utils.book_new();
        //sheet1
        let data1 = this.getErWeiData(this.fieldList,this.dataList)
        let ws1 = XLSX.utils.aoa_to_sheet(data1);
        XLSX.utils.book_append_sheet(workbook, ws1, '第一个sheet');
        // 这里可以添加多个sheet页
        //sheet2
        let ws2 = XLSX.utils.table_to_sheet(document.querySelector('#cbzbTable'), xlsxParam);
        XLSX.utils.book_append_sheet(workbook, ws2, '第二个sheet');
        //成本统计说明
        let data3 = this.getErWeiData(this.fieldListCbtjsm,this.cbtjsmDataList)
        let ws3 = XLSX.utils.aoa_to_sheet(data3);
        XLSX.utils.book_append_sheet(workbook, ws3, '第三个sheet');

        let wbout = XLSX.write(workbook, {
    
    
            bookType: 'xlsx',
            bookSST: true,
            type: 'array'
        });
        try {
    
    
            FileSaver.saveAs(
            new Blob([wbout], {
    
    
                type: 'application/octet-stream;charset=utf-8"'
            }), '投标项目配置总表.xlsx');
        } catch (e) {
    
    
            if (typeof console !== 'undefined') console.log(e, wbout);
        }
        return wbout;
      },
      formatJson(filterVal, jsonData) {
    
    
        return jsonData.map(v => filterVal.map(j => v[j]))
      },
        //返回表格需要的二维数组
      getErWeiData(fieldList,dataList){
    
    
          let tHeader = []//生成Excel表格的头部标题栏
          let filterVal = []//生成Excel表格的内容栏(根据自己的数据内容属性填写)
          for (var i in fieldList) {
    
    
            tHeader.push(fieldList[i].label)
            filterVal.push(fieldList[i].prop)
          }
          const list = dataList;//需要导出Excel的数据
          const data = this.formatJson(filterVal, list);
          data.unshift(tHeader); //可向数组的开头添加一个或更多元素,并返回新的长度。
          return data;
      },
      // 导出操作---------end---------


5,知识点补充

1,使用如下方式导出时,由于js-xlsx提供了自动加工功能,会识别数据格式,然后进行加工。

XLSX.utils.table_to_book(document.getElementById('dataTable')),

但是导出的Excel数据和table显示数据不完全一致。添加如下参数保证数据一致

XLSX.utils.table_to_book(document.getElementById('dataTable'),{
    
    raw:true}),

raw:表示导出数据是否是未加工的。

猜你喜欢

转载自blog.csdn.net/weixin_40362806/article/details/131050589
今日推荐