iview table(多表头)导出以及原生table的js导出(跨行跨列)

最近做的比较多的iview table的多表单渲染【后台返回动态多表头的culomns数据】,

1.采用jquery的table2excel.js

缺点:导出的文件会有提示问题
tableExport(tableId, name, ‘xlsx’)

2.iview table导出

  1. 先处理多表头的columns
	exportColumn = this.handleMultiTableHeader(this.columnsTop, false)
	// cy 处理多表头导出问题
    handleMultiTableHeader (columns, noSubTitle) {
      noSubTitle = noSubTitle || false
      return columns.map(res => {
        if (res.hasOwnProperty('children')) {
          return res.children.map(item => {
            item.title = `${noSubTitle ? '' : `${res.title.substring(res.title.indexOf('_') + 1)}_`}${item.title}`
            return item
          })
        } else {
          return res
        }
      }).flat()
    },
  1. 复制一份表头数据
	let ColumnOne = {}
    exportColumn.forEach(item => {
      ColumnOne[item.key] = item.title
    })
  1. 复制一份表单的数据(可以处理render的数据)
    TabData = JSON.parse(JSON.stringify(this.tableData))

  2. 自定义的一个标题作导出的excel表的内部标题(不是文件名,不是表名)
    原理:iview的table的separator属性: 数据分隔符,默认是逗号(,) ,用于更换到下一个单元格

let tableTitle = {}
tableTitle[`${exportColumn[0].key}`] = `${filename},,${houseName},,${date},,`
  1. 把标题对象unshift到表单数据里
    TabData.unshift(tableTitle, ColumnOne)

  2. noHeader: true关闭导出的标题 采用自定义的表标题和表头

      this.$refs.Table.exportCsv({
        filename: filename,
        columns: exportColumn,
        data: TabData.filter((data, index) => {
          for (let i in data) {
            // 解决日期格式问题
            if (typeof data[i] === 'string' && data[i].indexOf('T') === 10) {
              data[i] = data[i].substring(0, 10) + ' ' + data[i].substring(11, 16)
            }
          }
          return index < TabData.length
        }),
        noHeader: true
      })

你可能感兴趣的:(iview,table组件,table导出)