表格导出功能的实现

该代码实现了将表格数据导出为 Excel 文件的功能。它首先对表格数据进行去重操作,然后复制表格元素,并在副本上移除固定列。接下来,它将副本表格转换为工作表对象,并根据表头单元格的宽度设置工作表的列宽。最后,它创建一个工作簿对象,将工作表添加到工作簿中,并将工作簿保存为 Excel 文件。

整个导出过程经过逻辑整理和优化,以确保导出的数据准确、去重,并且在 Excel 中正确显示。

思路:

  1. 首先,通过打印this.tableData,可以查看原始数据。

  2. 然后,使用uniqBy函数对数据进行去重操作,以确保导出的数据中每个条目基于createTime字段的唯一性。

  3. 接下来,创建一个新的table元素,并将表格组件this.$refs.multipleTable.$el的HTML内容赋值给新创建的table元素。这样做是为了获取到完整的表格结构。

  4. 通过查询具有.is-fixed类的列,找到固定列,并将其从表格中移除,以便导出的Excel文件不包含固定列。

  5. 使用XLSX.utils.table_to_sheet函数将新创建的table转换为工作表对象ws

  6. 通过查询thead下的th元素,获取表头单元格,并根据单元格的宽度计算每列的宽度,并将其存储为列配置对象wscols

  7. 将列配置对象wscols设置为工作表对象ws的列宽度。

  8. 创建一个新的工作簿对象wb

  9. 使用XLSX.utils.book_append_sheet函数将工作表对象ws添加到工作簿对象wb中,并命名为'Sheet1'。

  10. 最后,使用XLSX.writeFile函数将工作簿对象wb保存为名为'table-data.xlsx'的Excel文件。

 // 导出

    exportExcel() {

      console.log('原始数据:', this.tableData) // 打印原始数据

      const uniqueData = uniqBy(this.tableData, 'createTime') // 对数据进行去重

      console.log('去重后的数据:', uniqueData) // 打印去重后的数据

      const table = document.createElement('table') // 创建一个新的table元素

      table.innerHTML = this.$refs.multipleTable.$el.outerHTML // 将表格的HTML内容赋值给新创建的table元素

      const fixedColumns = this.$refs.multipleTable.$el.querySelectorAll('.is-fixed') // 获取所有具有 .is-fixed 类的列

      fixedColumns.forEach(column => column.remove()) // 移除具有 .is-fixed 类的列

      const ws = XLSX.utils.table_to_sheet(table) // 将table转换为工作表对象

      const headerCells = table.querySelectorAll('thead th') // 获取表头单元格

      const wscols = Array.from(headerCells).map(cell => {

        return { wch: Math.max(cell.offsetWidth / 7, 10) } // 计算每列的宽度并存储为列配置对象

      })

      ws['!cols'] = wscols // 设置工作表的列宽度

      const wb = XLSX.utils.book_new() // 创建一个新的工作簿对象

      XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') // 将工作表添加到工作簿中,命名为'Sheet1'

      XLSX.writeFile(wb, 'table-data.xlsx') // 将工作簿保存为名为'table-data.xlsx'的文件

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值