前端原生下载excel表格

方式一 

// html 部分--------
  <button @click="downloadExcel()">下载excel</button>

// js 代码----------
  const download = (data, name) => {
    let a = document.createElement('a')
    const result = data.map(v => {
      return Object.values(v).join('\t')
    }).join('\n')
    console.log(result )

    a.href = URL.createObjectURL(new Blob([result]))
    a.setAttribute('download', name)
    a.click()
  }

  const downloadExcel = () => {
    download([
      { id: 'ID', name: '姓名', age: '年龄' }, // 表头
      { id: 1, name: '张三', age: '18' },
      { id: 2, name: '李四', age: '19' },
      { id: 3, name: '王五', age: '20' },
    ], '用户信息.xls')
  }

控制台打印log(result) 

方式二:下载csv表格数据

        后台返回数据:        

const tableData = [
    {id:1,name: "张三",age:18,sex:'男'},
    {id:2,name: "李四",age:19,sex:'男'},
    {id:3,name: "王五",age:20,sex:'女'},
    {id:4,name: "赵六",age:21,sex:'男'},
]

功能 

// html 部分--------
  <button @click="downloadExcel()">下载excel</button>

// js 代码----------

function downloadExcel() {
  if (tableData.length > 0) {
    const headerMap = {  // 表头中英文映射,同时可以限定下载那些列的设局
      name: '姓名',
      age: '年龄',
      sex: '性别',
    }
    const str = commonArrToString(tableData, headerMap) + '\n'
    createLink(str, '用户信息')
  }
}


// ----------------
const createLink = (str, name) => {
  const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str)
  // 通过创建a标签实现
  const link = document.createElement('a')
  link.href = uri
  // 对下载的文件命名
  link.download = `${name}.csv`
  link.click()
}

// ----------------
commonArrToString = (tableData, headerMap) => {
  let str = ''
  const columns = Object.keys(headerMap)
  str += Object.values(headerMap).join(',') + '\n' // 替换英文

  // 增加\t为了不让表格显示科学计数法或者其他格式
  for (let i = 0; i < tableData.length; i++) {
    for (let j = 0; j < columns.length; j++) {
      let fliterColumn = tableData[i][columns[j]] + ''
      str += `${fliterColumn + '\t'},`
    }
    str += '\n'
  }
  return str
}

方式三: 可定制的excel导出

// html 部分--------
  <button @click="downloadExcel()">下载excel</button>

// js 代码----------
  /*
    可定制的excel导出
    1. 字体颜色和背景颜色
    2.宽度设置
    3.单元格合并
    4.支持html元素
  */ 
  function downloadExcel() {
    JSONToExcelConvertor([
      { id: 1, name: { value: '<i>张三</i>', color: 'red' }, age: 22 },
      { id: 2, name: { value: '李四', backgroundColor: 'red' }, age: 22 },
      { id: 3, name: {value:'王五',width:100}, age: 22 },
      { id: 4, name: {value:'赵六',rowspan:2}, age: 22 },
      { id: 5, age: 22 },
    ], '用户信息', [
      'ID', '姓名', '年龄'
    ])
  }
  function JSONToExcelConvertor(JSONData, FileName, ShowLabel) {
    const arrData = typeof JSONData !== 'object' ? JSON.parse(JSONData) : JSONData

    let excel = '<table>'
    var row = '<tr>'
    for (var i = 0, l = ShowLabel.length; i < l; i++) {
      if (typeof ShowLabel[i] === 'object') {
        row += `<th ${ShowLabel[i].width ? `width=${ShowLabel[i].width}` : ''}>` + ShowLabel[i].value + '</th>'
      } else {
        row += '<th>' + ShowLabel[i] + '</th>'
      }
    }
    excel += row + '</tr>'

    for (var i = 0; i < arrData.length; i++) {
      var row = '<tr>'
      let labelIndex = 0
      for (const index in arrData[i]) {
        const value = arrData[i][index] === '.' ? '' : arrData[i][index]
        if (typeof value === 'object') {
          row +=
            `<td style="text-align:center;background-color:${value.backgroundColor};color:${value.color}" ${value.rowspan ? `rowspan=${value.rowspan}` : ''
            } ${value.colspan ? `colspan=${value.colspan}` : ''} ${value.width ? `width=${value.width}` : ''} >` +
            value.value +
            '</td>'
        } else {
          row += '<td style="text-align:center">' + value + '</td>'
        }
        labelIndex++
      }
      excel += row + '</tr>'
    }

    excel += '</table>'

    let excelFile =
      "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>"
    excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">'
    excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel'
    excelFile += '; charset=UTF-8">'
    excelFile += '<head>'
    excelFile += '<!--[if gte mso 9]>'
    excelFile += '<xml>'
    excelFile += '<x:ExcelWorkbook>'
    excelFile += '<x:ExcelWorksheets>'
    excelFile += '<x:ExcelWorksheet>'
    excelFile += '<x:Name>'
    excelFile += '{worksheet}'
    excelFile += '</x:Name>'
    excelFile += '<x:WorksheetOptions>'
    excelFile += '<x:DisplayGridlines/>'
    excelFile += '</x:WorksheetOptions>'
    excelFile += '</x:ExcelWorksheet>'
    excelFile += '</x:ExcelWorksheets>'
    excelFile += '</x:ExcelWorkbook>'
    excelFile += '</xml>'
    excelFile += '<![endif]-->'
    excelFile += '</head>'
    excelFile += '<body>'
    excelFile += excel
    excelFile += '</body>'
    excelFile += '</html>'

    const uri = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelFile)

    const link = document.createElement('a')
    link.href = uri

    link.style = 'visibility:hidden'
    link.download = FileName + '.xls'

    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
  }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现原生table导出excel表格,可以使用以下方法: 首先,在组件的methods中定义一个方法,比如exportExcel,该方法用于将table导出为excel文件。在该方法中,可以使用第一个引用\[1\]中的代码作为参考,其中使用了XLSX和FileSaver库来实现导出功能。 接下来,需要定义导出excel的数据格式。可以参考第二个引用\[2\]中的代码,其中定义了tHeader(表头中文)、filterVal(表头key)、list(表格数据)和total_info(总计信息数据)等字段。 在exportExcel方法中,可以根据定义的数据格式,将table数据填充到相应的字段中。然后使用XLSX库的table_to_book方法将table转换为workbook对象。 接着,使用XLSX库的write方法将workbook对象转换为二进制字符串。然后使用FileSaver库的saveAs方法将二进制字符串保存为excel文件,可以指定文件名。 最后,返回导出的excel文件内容。 总结起来,实现原生table导出excel表格的步骤如下: 1. 定义导出excel的数据格式,包括表头中文、表头key、表格数据和总计信息数据等字段。 2. 在exportExcel方法中,将table数据填充到相应的字段中。 3. 使用XLSX库的table_to_book方法将table转换为workbook对象。 4. 使用XLSX库的write方法将workbook对象转换为二进制字符串。 5. 使用FileSaver库的saveAs方法将二进制字符串保存为excel文件,可以指定文件名。 6. 返回导出的excel文件内容。 希望以上解答对您有帮助! #### 引用[.reference_title] - *1* [原生table表格使用js导出excel表](https://blog.csdn.net/weixin_46408500/article/details/127865069)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [前端table导出excel表格方法汇总](https://blog.csdn.net/yufengaotian/article/details/121439968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值