纯前端实现在vue中导出Excel表格

需求:导出页面中的表格,格式是excel

1:下载excel依赖

npm install --save xlsx file-saver

2.新建一个js文件

在outToExcel.js中书写如下代码,直接cv就行

import FileSaver from 'file-saver';
import * as XLSX from 'xlsx'
export default {
    // 导出Excel表格
    exportExcel(name, tableName) {
        //name表示生成excel的文件名     tableName表示表格的id
        var sel = XLSX.utils.table_to_book(document.querySelector(tableName))
        var selIn = XLSX.write(sel, { bookType: 'xlsx', bookSST: true, type: 'array' })
        try {
            FileSaver.saveAs(new Blob([selIn], { type: 'application/octet-stream' }), name)
        } catch (e) {
            if (typeof console !== 'undefined') console.log(e, selIn)
        }
        return selIn
    }
};

 3.在main.js文件中引入outToExcel.js

// 导出excel插件
import outToexcel from './assets/outToExcel'

Vue.prototype.outToExcel = outToexcel

4.在页面中找到定义的table 我这里用的是element-ui的表格,给它绑定id

<el-table
            stripe
            border
            :data="tableData"
            style="width: 100%"
            height="300"
            id="vcfResult"
          >

5.页面上定义一个按钮,设定导出excel图表事件

<el-button
              @click="exportExcel()"
              type="warning"
              plain
              icon="el-icon-download"
              size="mini"
              style="margin-right: 5px"
              >导出表格
            </el-button>

在methods中触发导出表格的按钮事件

  exportExcel() {
      this.outToExcel.exportExcel("表格名字.xlsx","#vcfResult");
      //第一个引号里面是表格导出时的名字
      //第二个是表格的id,这个插件是通过id导出的
    },

这样就可以成功导出表格了

 提示

如果使用Element-UI组件, 导出Table表格可能报错 TypeError: Cannot read properties of undefined (reading ‘utils‘)

解决办法:把import XLSX from 'xlsx’变成import * as XLSX from ‘xlsx’

如果导出发现导出了两个同样的表格,原因是table使用了fixed属性固定列,导出表格时会出现导出两次的问题

解决办法:修改outToExecel.js文件内容为

import FileSaver from 'file-saver';
import * as XLSX from 'xlsx'
export default {
    // 导出Excel表格
    exportExcel(name, tableName) {
        //name表示生成excel的文件名     tableName表示表格的id
        var xlsxParam = { raw: true }
        let fix = document.querySelector(".el-table__fixed");
        let sel
        if (fix) {
            sel = XLSX.utils.table_to_book(
                document.querySelector(tableName).removeChild(fix)
            )
            sel.wrapText = 1
            sel["Sheets"]["Sheet1"]["!cols"] = [
                { wpx: 40 },
                { wpx: 100 },
                { wpx: 100 },
                { wpx: 100 },
                { wpx: 100 },
                { wpx: 100 },
                { wpx: 100 },
                { wpx: 100 },
                { wpx: 100 },
            ];
            document.querySelector(tableName).appendChild(fix);
        } else {
            sel = XLSX.utils.table_to_book(document.querySelector(tableName), xlsxParam)
        }

        var selIn = XLSX.write(sel, { bookType: 'xlsx', bookSST: true, type: 'array' })
        try {
            FileSaver.saveAs(new Blob([selIn], { type: 'application/octet-stream' }), name)
        } catch (e) {
            if (typeof console !== 'undefined') console.log(e, selIn)
        }
        return selIn
    }
};

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

多看书少吃饭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值