当前位置:首页 > 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>

配置数据:

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 表格,可以结合上述方法:

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 内容:

vue表格实现导出

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 实现文件树的方法 使用递归组件 递归组件是处理嵌套数据结构的理想方式。文件树通常包含文件夹和文件的嵌套结构,适合用递归组件实现。 <template> <ul>…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

vue 实现modal

vue 实现modal

Vue 实现 Modal 的方法 使用 Vue 原生组件 通过 Vue 的组件系统可以轻松实现 Modal。创建一个可复用的 Modal 组件,通过 props 控制显示与隐藏。 <templ…

vue实现pc

vue实现pc

Vue 实现 PC 端应用开发 Vue.js 是一个流行的前端框架,适用于构建 PC 端 Web 应用。以下是关键步骤和最佳实践: 项目初始化 使用 Vue CLI 或 Vite 创建项目:…

vue toast实现

vue toast实现

Vue Toast 实现方法 使用第三方库(推荐) 安装 vue-toastification 库,这是一个功能丰富且轻量级的 Vue Toast 插件。 npm install vue-toast…

自实现vue

自实现vue

实现 Vue 的核心功能 要实现一个简化版的 Vue,需要理解其核心功能:数据响应式、模板编译、虚拟 DOM 和组件系统。以下是关键步骤的分解: 数据响应式 Vue 使用 Object.define…