Vue 表格组件 vxe-table 进阶,灵活导出指定数据的 CSV 文件

在实际业务开发中,表格数据导出是高频需求。大多数场景下,我们导出的是表格当前展示的数据,但有时业务需要导出特定的数据集(如:筛选后的结果、选中的数据、或后端返回的原始数据)。本文将基于 vxe-table 组件,介绍如何通过 exportData 方法实现指定数据导出,并提供多种实用场景的解决方案。

exportData 方法说明

vxe-table提供了强大的导出功能,其 exportData 方法支持灵活的配置。关键在于 data 参数------当我们需要导出非表格当前显示的数据时,可以通过该参数传入自定义的数据源。

javascript 复制代码
$table.exportData({
  type: 'csv',      // 导出格式:csv / xlsx / html / pdf
  data: customList  // 自定义数据源,覆盖表格当前数据
})

代码

html 复制代码
<template>
  <div>
    <vxe-button @click="exportEvent">直接导出</vxe-button>
    <vxe-table
      ref="tableRef"
      :export-config="{}"
      :data="tableData">
      <vxe-column type="seq" width="70"></vxe-column>
      <vxe-column field="name" title="Name"></vxe-column>
      <vxe-column field="sex" title="Sex"></vxe-column>
      <vxe-column field="age" title="Age"></vxe-column>
    </vxe-table>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const tableRef = ref()

const tableData = ref([
  { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
  { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
  { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
  { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' }
])
const exportEvent = () => {
  const $table = tableRef.value
  if ($table) {
    const list = [
      { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
      { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
      { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
      { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' },
      { id: 10005, name: 'Test5', role: 'Test', sex: 'Man', age: 32, address: 'Shanghai' },
      { id: 10006, name: 'Test6', role: 'Develop', sex: 'Women', age: 24, address: 'Guangzhou' },
      { id: 10007, name: 'Test7', role: 'Develop', sex: 'Man', age: 40, address: 'Shanghai' },
      { id: 10008, name: 'Test8', role: 'Develop', sex: 'Women', age: 43, address: 'Guangzhou' },
      { id: 10009, name: 'Test9', role: 'PM', sex: 'Man', age: 39, address: 'Shanghai' },
      { id: 10010, name: 'Test10', role: 'Test', sex: 'Women', age: 29, address: 'test abc' }
    ]
    $table.exportData({
      type: 'csv',
      data: list // 关键点:传入自定义数据
    })
  }
}
</script>

场景1,导出筛选后的数据

当表格开启了筛选功能,用户可能希望导出的是当前筛选结果,而非原始数据。此时可以获取筛选后的数据源传入。

javascript 复制代码
const exportFilteredData = () => {
  const $table = tableRef.value
  // 获取表格当前筛选后的数据(需配合 vxe-table 的筛选功能)
  const filteredData = $table.getData()
  $table.exportData({
    type: 'csv',
    data: filteredData
  })
}

场景2,导出选中行的数据

例如,结合 checkbox 列,可以导出用户勾选的行。

javascript 复制代码
const exportSelectedData = () => {
  const $table = tableRef.value
  const selectedRecords = $table.getCheckboxRecords()
  $table.exportData({
    type: 'csv',
    data: selectedRecords
  })
}

大数据量导出注意事项

当导出的数据量较大时(例如超过 5000 条),直接在前端导出可能导致页面卡顿。建议采用后端导出方式,vxe-table 的 exportData 也支持通过 url 参数直接请求后端接口。

javascript 复制代码
$table.exportData({
  type: 'csv',
  url: '/api/export',  // 后端导出接口
  method: 'post',
  params: { ids: selectedIds }  // 传递必要参数
})

通过灵活运用 exportData 的 data 参数,可以轻松实现各种定制化的导出需求,极大地提升了表格组件的扩展性。

https://vxetable.cn

相关推荐
To_OC8 小时前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
kyriewen12 小时前
我用 50 行代码重写了 React Router 核心,终于搞懂了前端路由原理
前端·javascript·react.js
Asize15 小时前
HTML5 Canvas 基础:从按帧动画到 ECharts 数据可视化
前端·javascript·canvas
默_笙15 小时前
🎄 后端给我一堆扁平数据,我 10 行代码把它变成了树
前端·javascript
前端Hardy15 小时前
又一个 AI 神器火了!
前端·javascript·后端
锋行天下15 小时前
我试图优化 Vite 的拆包,结果首屏慢了 10 倍
前端·vue.js·架构
PBitW15 小时前
GPT训练我的第二天,我表示不过如此!!!😕😕😕
前端·javascript·面试
kyriewen16 小时前
白宫直接给 OpenAI 下了限制令,GPT-5.6 不能随便放出来了
前端·javascript·面试
ZhengEnCi20 小时前
Q02-Vue-React-index.html完全指南
vue.js·react.js·html
晴虹21 小时前
vue3-scroll-more:横向滚动条-元素或页签过多滚动显示处理的组件
前端·vue.js