当前位置:首页 > 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 中实现文档功能可以通过多种方式,包括使用富文本编辑器、Markdown 解析或直接渲染 HTML。以下是几种常见的实现方法。 使用富文本编辑器 富文本编辑器如 T…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框…

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提…

vue实现双折线图

vue实现双折线图

实现双折线图的步骤 安装必要的依赖库(如 ECharts 或 Chart.js),这里以 ECharts 为例: npm install echarts --save 在 Vue 组件中引入 ECh…

vue实现用户信息删除

vue实现用户信息删除

Vue 实现用户信息删除功能 在 Vue 中实现用户信息删除功能通常涉及前端界面交互和后端 API 调用。以下是实现步骤: 前端界面设计 创建删除按钮或操作项,通常使用 @click 事件触发删除…

vue前端实现下载进度

vue前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用XM…