当前位置:首页 > VUE

vue表格实现导出

2026-01-16 02:14:59VUE

使用 vue-json-excel 插件

安装插件:

npm install vue-json-excel --save

在组件中引入并注册:

import JsonExcel from 'vue-json-excel'
export default {
  components: {
    JsonExcel
  }
}

模板中使用:

<download-excel
  :data="tableData"
  :fields="exportFields"
  name="导出文件名.xls">
  <button>导出Excel</button>
</download-excel>

配置数据:

vue表格实现导出

data() {
  return {
    tableData: [...], // 表格数据
    exportFields: {
      '列名1': 'field1',
      '列名2': 'field2'
    }
  }
}

使用 xlsx 和 file-saver 库

安装依赖:

npm install xlsx file-saver --save

创建导出方法:

import * as XLSX from 'xlsx'
import FileSaver from 'file-saver'

methods: {
  exportExcel() {
    const worksheet = XLSX.utils.json_to_sheet(this.tableData)
    const workbook = XLSX.utils.book_new()
    XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
    const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' })
    const data = new Blob([excelBuffer], { type: 'application/octet-stream' })
    FileSaver.saveAs(data, '导出文件.xlsx')
  }
}

使用 Element UI 的表格导出

如果使用 Element UI 表格,可以结合上述方法:

vue表格实现导出

methods: {
  exportExcel() {
    import('@/vendor/Export2Excel').then(excel => {
      const tHeader = ['列名1', '列名2']
      const filterVal = ['field1', 'field2']
      const data = this.formatJson(filterVal, this.tableData)
      excel.export_json_to_excel({
        header: tHeader,
        data,
        filename: '导出文件'
      })
    })
  },
  formatJson(filterVal, jsonData) {
    return jsonData.map(v => filterVal.map(j => v[j]))
  }
}

自定义 CSV 导出

简单实现 CSV 导出:

methods: {
  exportCSV() {
    let csvContent = "data:text/csv;charset=utf-8,"
    const headers = Object.keys(this.tableData[0]).join(",")
    const rows = this.tableData.map(item => 
      Object.values(item).join(",")
    )
    csvContent += headers + "\r\n" + rows.join("\r\n")
    const encodedUri = encodeURI(csvContent)
    const link = document.createElement("a")
    link.setAttribute("href", encodedUri)
    link.setAttribute("download", "导出数据.csv")
    document.body.appendChild(link)
    link.click()
  }
}

处理大数据量导出

对于大量数据,建议分页处理或使用 Web Worker:

exportLargeData() {
  const worker = new Worker('./exportWorker.js')
  worker.postMessage(this.tableData)
  worker.onmessage = (e) => {
    const blob = new Blob([e.data], { type: 'application/octet-stream' })
    FileSaver.saveAs(blob, '大数据导出.xlsx')
    worker.terminate()
  }
}

exportWorker.js 内容:

self.importScripts('https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js')

self.onmessage = function(e) {
  const worksheet = XLSX.utils.json_to_sheet(e.data)
  const workbook = XLSX.utils.book_new()
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
  const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' })
  self.postMessage(excelBuffer)
}

标签: 表格vue
分享给朋友:

相关文章

vue实现表格读取数据

vue实现表格读取数据

Vue 实现表格读取数据的方法 使用静态数据 静态数据可以直接在 Vue 组件的 data 中定义,并通过 v-for 指令渲染到表格中。 <template> <table&…

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

vue前端实现下载进度

vue前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用XM…

vue聊天实现

vue聊天实现

Vue 聊天应用实现步骤 创建 Vue 项目 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖(如 Vue 3、Element UI 或 Vuetify 用于 UI 组件)。 npm c…

vue实现图集

vue实现图集

Vue 实现图集的方法 在 Vue 中实现图集功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用第三方库(如 vue-image-lightbox) 安装 vue-image-ligh…

vue评分实现

vue评分实现

Vue 评分组件实现方法 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 引入并注册组件: import Vue from '…