当前位置:首页 > VUE

vue报表导出实现

2026-01-19 00:02:24VUE

使用 vue-json-excel 插件实现导出

安装插件依赖:

npm install vue-json-excel --save

在 main.js 中注册组件:

import JsonExcel from 'vue-json-excel'
Vue.component('downloadExcel', JsonExcel)

模板中使用示例:

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

数据格式示例:

export default {
  data() {
    return {
      json_fields: {
        '姓名': 'name',
        '年龄': 'age',
        '城市': 'city'
      },
      json_data: [
        {name: '张三', age: 28, city: '北京'},
        {name: '李四', age: 32, city: '上海'}
      ]
    }
  }
}

使用 xlsx 库实现复杂导出

安装 xlsx 库:

npm install xlsx --save

核心导出方法:

import XLSX from 'xlsx'

exportExcel() {
  const worksheet = XLSX.utils.json_to_sheet(this.tableData)
  const workbook = XLSX.utils.book_new()
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
  XLSX.writeFile(workbook, '导出数据.xlsx')
}

处理复杂表头:

const headers = [
  { header: '姓名', key: 'name', width: 20 },
  { header: '年龄', key: 'age', width: 10 }
]
const data = this.tableData.map(item => ({
  name: item.username,
  age: item.userAge
}))
const worksheet = XLSX.utils.json_to_sheet(data, { header: headers })

实现前端分页数据全量导出

获取所有数据方法:

async exportAllData() {
  const res = await api.getAllData() // 替换为实际API调用
  const worksheet = XLSX.utils.json_to_sheet(res.data)
  const workbook = XLSX.utils.book_new()
  XLSX.utils.book_append_sheet(workbook, worksheet, '全部数据')
  XLSX.writeFile(workbook, '全部数据.xlsx')
}

自定义样式和格式

使用 xlsx-style 库:

npm install xlsx-style --save

设置单元格样式示例:

import XLSX from 'xlsx-style'

const ws = XLSX.utils.json_to_sheet(data)
ws['A1'].s = {
  font: { bold: true, color: { rgb: 'FF0000' } },
  fill: { fgColor: { rgb: 'FFFF00' } }
}

服务端生成导出文件

前端请求示例:

exportExcel() {
  window.location.href = '/api/export/excel?params=' + this.queryParams
}

Node.js 服务端示例:

const excel = require('exceljs')

router.get('/export/excel', async (req, res) => {
  const workbook = new excel.Workbook()
  const worksheet = workbook.addWorksheet('报表')

  // 添加数据
  worksheet.addRows(data)

  res.setHeader(
    'Content-Type',
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  )
  res.setHeader(
    'Content-Disposition',
    'attachment; filename=report.xlsx'
  )

  await workbook.xlsx.write(res)
  res.end()
})

大数据量分片导出

前端分片请求实现:

async chunkedExport(total) {
  const chunkSize = 5000
  const chunks = Math.ceil(total / chunkSize)
  let allData = []

  for(let i=0; i<chunks; i++) {
    const res = await api.getData({
      page: i+1,
      size: chunkSize
    })
    allData = allData.concat(res.data)
  }

  this.exportToExcel(allData)
}

vue报表导出实现

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

相关文章

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed:…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件:…

vue实现选中单元格

vue实现选中单元格

Vue 实现选中单元格的方法 基础实现思路 在 Vue 中实现选中单元格功能,通常可以通过动态绑定 class 或 style 来实现。以下是一个基于表格的简单实现示例: <templ…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要…

vue 实现toast

vue 实现toast

vue 实现 toast 的方法 在 Vue 中实现 Toast 提示功能可以通过多种方式,以下是几种常见的实现方法: 使用第三方库 Vue 生态中有许多成熟的 Toast 库,例如 vue-toa…

vue  select实现

vue select实现

Vue Select 实现方法 在 Vue 中实现下拉选择功能可以使用原生 <select> 标签或第三方库如 vue-select。以下是两种方法的详细说明: 原生 HTML Sel…