当前位置:首页 > 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 实现简单弹窗 组件基础结构 创建一个名为 Modal.vue 的组件文件,包含模板、脚本和样式部分: <template> <div class="mod…

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind:…

vue实现rem适配

vue实现rem适配

Vue 项目中实现 REM 适配 REM(Root EM)是一种基于根元素(html)字体大小的相对单位,常用于移动端适配。以下是在 Vue 项目中实现 REM 适配的详细方法。 安装 postcs…

vue菜单tab实现

vue菜单tab实现

实现Vue菜单Tab的步骤 在Vue中实现菜单Tab功能,可以通过动态组件或条件渲染来实现。以下是几种常见的方法: 使用动态组件 动态组件允许根据当前选中的Tab动态切换显示内容。定义一个组件数组…

vue实现下拉

vue实现下拉

Vue 实现下拉功能 使用原生 HTML 和 Vue 指令 通过 Vue 的 v-model 和 v-show 或 v-if 指令实现简单的下拉功能。 <template> <…

vue实现聊天功能

vue实现聊天功能

Vue实现聊天功能的方法 使用WebSocket实现实时通信 安装WebSocket客户端库如socket.io-client,在Vue组件中建立连接。创建一个消息列表和数据输入框,通过WebSock…