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

大数据量分片导出

前端分片请求实现:

vue报表导出实现

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.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现常见功能的几种方法: 数据绑定与响应式更新 在 Vue 中,数据绑定通过 v-model…

vue实现oauth

vue实现oauth

Vue 实现 OAuth 的步骤 安装必要的依赖 确保项目中安装了 axios 和 vue-router。OAuth 通常需要发送 HTTP 请求和处理路由跳转。 npm install axios…

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Comp…

vue实现动画

vue实现动画

Vue 实现动画的方法 Vue 提供了多种方式来实现动画效果,包括内置的过渡系统、第三方动画库以及直接操作 CSS 或 JavaScript 动画。 使用 Vue 内置过渡系统 Vue 的 <…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…

vue实现ide

vue实现ide

Vue 实现 IDE 的基本思路 使用 Vue 构建一个简易的集成开发环境(IDE)需要整合代码编辑器、文件管理、终端模拟等功能。以下是关键实现步骤和推荐工具。 核心功能模块 代码编辑器 使用…