vue项目中,由前端导出excel文件

csv导出


// 列标题,逗号隔开,每一个逗号就是隔开一个单元格
      let str = `Excel行号,*姓名,*邮箱,手机号,岗位,管理组,角色,失败原因\n`
      // let str = `姓名,电话,邮箱\n`
      const jsonData = this.importResultData.errors.map(item => {
        return {
          excelRowNumber: item.excelRowNumber,
          userName: item.userName,
          email: item.email,
          cellPhone: item.cellPhone,
          position: item.position,
          department: item.department,
          role: item.role,
          error: item.error
        }
      })
      // 增加\t为了不让表格显示科学计数法或者其他格式
      for (let i = 0; i < jsonData.length; i++) {
        for (const item in jsonData[i]) {
          str += `${jsonData[i][item] + '\t'},`
        }
        str += '\n'
      }
      // encodeURIComponent解决中文乱码
      const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str)
      // 通过创建a标签实现
      var link = document.createElement('a')
      link.href = uri
      // 对下载的文件命名
      link.download = '1.CSV'
      document.body.appendChild(link)
      link.click()
      document.body.removeChild(link)

xls导出且导出文件为二进制文件

 // 生成一个新的workbook,然后往workbook追加worksheet
      const cleanWorkbook = XLSX.utils.book_new()
      const jsonData = JSON.parse(JSON.stringify(this.importResultData.errors))

      const jsonFormateData = jsonData.map(item => {
        const obj = {

        }
        const itemKeys = Object.keys(item)
        const jsonFieldsKeys = Object.keys(this.json_fields)
        itemKeys.forEach(itemKey => {
          jsonFieldsKeys.forEach(jsonFieldsKey => {
            if (this.json_fields[jsonFieldsKey] === itemKey) {
              obj[jsonFieldsKey] = item[itemKey]
            }
          })
        })
        return obj
      })
      const worksheet = XLSX.utils.json_to_sheet(jsonFormateData)
      XLSX.utils.book_append_sheet(cleanWorkbook, worksheet, 'sheet2')

      // 只需要一个worksheet的时候可以直接read method生成workbook,此时worksheet名称默认为"Sheet1"
      // const directWorkbook = XLSX.read(table.outerHTML, {
      //   type: 'string'
      // })
      const stringToArrayBuffer = function(string) {
        const buffer = new ArrayBuffer(string.length)
        const view = new Uint8Array(buffer)
        for (let i = 0; i !== string.length; ++i) {
          view[i] = string.charCodeAt(i) & 0xFF
        }
        return buffer
      }
      const ab = stringToArrayBuffer(XLSX.write(cleanWorkbook, {
        bookType: 'xls',
        type: 'binary'
      }))
      // 利用URL.createObjectURL()方法为a元素生成blob URL
      const url = window.URL.createObjectURL(new Blob([ab]))
      const a = document.createElement('a')
      a.href = url
      a.download = this.failedFileName
      a.click()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值