当前位置:首页 > VUE

vue表格实现导出

2026-02-17 03:32:01VUE

使用 vue-json-excel 插件

安装插件:

npm install vue-json-excel --save

在组件中引入并注册:

import JsonExcel from 'vue-json-excel'

export default {
  components: {
    JsonExcel
  },
  data() {
    return {
      json_data: [
        {name: '张三', age: 25},
        {name: '李四', age: 30}
      ],
      json_fields: {
        '姓名': 'name',
        '年龄': 'age'
      },
      filename: '用户数据'
    }
  }
}

模板中使用:

<download-excel
  :data="json_data"
  :fields="json_fields"
  :name="filename">
  <button>导出Excel</button>
</download-excel>

使用 xlsx 库

安装依赖:

npm install xlsx file-saver --save

创建导出方法:

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

export default {
  methods: {
    exportExcel() {
      const data = [
        ['姓名', '年龄'],
        ['张三', 25],
        ['李四', 30]
      ]
      const ws = XLSX.utils.aoa_to_sheet(data)
      const wb = XLSX.utils.book_new()
      XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
      const wbout = XLSX.write(wb, {bookType: 'xlsx', type: 'array'})
      FileSaver.saveAs(
        new Blob([wbout], {type: 'application/octet-stream'}),
        '用户数据.xlsx'
      )
    }
  }
}

自定义表格导出

处理表格数据:

export default {
  methods: {
    exportTable() {
      const table = this.$refs.table
      const wb = XLSX.utils.table_to_book(table)
      const wbout = XLSX.write(wb, {bookType: 'xlsx', type: 'array'})
      FileSaver.saveAs(
        new Blob([wbout], {type: 'application/octet-stream'}),
        '表格数据.xlsx'
      )
    }
  }
}

处理复杂数据格式

格式化日期数据:

methods: {
  formatData(data) {
    return data.map(item => ({
      ...item,
      createTime: this.$moment(item.createTime).format('YYYY-MM-DD')
    }))
  }
}

合并多级表头:

const ws = XLSX.utils.json_to_sheet(this.formatData(tableData))
ws['!merges'] = [
  {s: {r:0,c:0}, e: {r:0,c:3}}
]

导出 CSV 格式

使用纯前端方案:

exportCSV() {
  const csvContent = this.tableData
    .map(row => Object.values(row).join(','))
    .join('\n')
  const blob = new Blob([csvContent], {type: 'text/csv;charset=utf-8;'})
  FileSaver.saveAs(blob, 'data.csv')
}

服务端导出方案

前端请求:

exportServerExcel() {
  axios.post('/api/export', {
    params: this.searchParams
  }, {
    responseType: 'blob'
  }).then(res => {
    const blob = new Blob([res.data], {type: 'application/vnd.ms-excel'})
    FileSaver.saveAs(blob, 'server_data.xlsx')
  })
}

服务端示例(Node.js):

vue表格实现导出

const excel = require('exceljs')
router.post('/export', async (req, res) => {
  const workbook = new excel.Workbook()
  const worksheet = workbook.addWorksheet('Sheet1')
  // 添加表头和数据
  res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
  res.setHeader('Content-Disposition', 'attachment; filename=export.xlsx')
  await workbook.xlsx.write(res)
  res.end()
})

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

相关文章

vue实现sso

vue实现sso

Vue 实现 SSO(单点登录)方案 单点登录(SSO)允许用户通过一次登录访问多个相关系统。以下是基于 Vue 的实现方案: 使用 OAuth2/OpenID Connect 协议 OAuth2…

vue实现高亮

vue实现高亮

Vue 实现文本高亮的方法 在 Vue 中实现文本高亮可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-html 指令 通过 v-html 指令可以动态插入 HTML 内容,将需要高…

vue实现suspense

vue实现suspense

Vue 3 中实现 Suspense Suspense 是 Vue 3 引入的一个内置组件,用于处理异步依赖的加载状态。它允许在等待异步组件或异步数据加载时显示一个后备内容(fallback),直到异…

vue 实现表单

vue 实现表单

Vue 表单实现方法 Vue.js 提供了多种方式实现表单,包括双向数据绑定、表单验证和动态表单生成。以下是常见的实现方法: 基础表单绑定 使用 v-model 指令实现表单元素与数据的双向绑定:…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue 实现fadeout

vue 实现fadeout

Vue 实现淡出效果 在 Vue 中实现淡出(fade-out)效果可以通过 CSS 过渡或动画结合 Vue 的动态渲染功能完成。以下是几种常见方法: 使用 Vue 过渡(Transition)组件…