当前位置:首页 > VUE

vue项目实现导出excel

2026-02-22 17:35:40VUE

使用xlsx和file-saver库实现导出Excel

安装依赖库:

npm install xlsx file-saver --save

创建导出工具函数:

import * as XLSX from 'xlsx'
import { saveAs } from 'file-saver'

export function exportToExcel(data, fileName = 'export.xlsx') {
  const worksheet = XLSX.utils.json_to_sheet(data)
  const workbook = XLSX.utils.book_new()
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
  const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' })
  const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
  saveAs(blob, fileName)
}

在组件中使用:

import { exportToExcel } from '@/utils/exportExcel'

const exportData = [
  { name: '张三', age: 25, department: '研发部' },
  { name: '李四', age: 30, department: '市场部' }
]

function handleExport() {
  exportToExcel(exportData, '员工信息.xlsx')
}

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

安装插件:

npm install vue-json-excel --save

全局注册组件:

import Vue from 'vue'
import JsonExcel from 'vue-json-excel'

Vue.component('downloadExcel', JsonExcel)

在模板中使用:

<download-excel
  :data="exportData"
  :fields="jsonFields"
  name="员工信息.xlsx">
  <button>导出Excel</button>
</download-excel>

<script>
export default {
  data() {
    return {
      exportData: [
        { name: '张三', age: 25, department: '研发部' },
        { name: '李四', age: 30, department: '市场部' }
      ],
      jsonFields: {
        '姓名': 'name',
        '年龄': 'age',
        '部门': 'department'
      }
    }
  }
}
</script>

导出带样式的复杂表格

使用xlsx-style库实现样式导出:

npm install xlsx-style --save

创建带样式的导出函数:

import * as XLSX from 'xlsx-style'
import { saveAs } from 'file-saver'

export function exportStyledExcel(data, headers, fileName = 'export.xlsx') {
  const ws = XLSX.utils.json_to_sheet(data, { header: headers })

  // 设置表头样式
  if(ws['!ref']) {
    const range = XLSX.utils.decode_range(ws['!ref'])
    for(let C = range.s.c; C <= range.e.c; ++C) {
      const headerCell = XLSX.utils.encode_cell({ r: range.s.r, c: C })
      ws[headerCell].s = {
        font: { bold: true, color: { rgb: "FFFFFF" } },
        fill: { fgColor: { rgb: "4F81BD" } },
        alignment: { horizontal: "center" }
      }
    }
  }

  const wb = XLSX.utils.book_new()
  XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
  const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })
  const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
  saveAs(blob, fileName)
}

导出多Sheet的Excel文件

创建多Sheet导出函数:

export function exportMultiSheetExcel(sheets, fileName = 'export.xlsx') {
  const wb = XLSX.utils.book_new()

  sheets.forEach(sheet => {
    const ws = XLSX.utils.json_to_sheet(sheet.data)
    XLSX.utils.book_append_sheet(wb, ws, sheet.name || 'Sheet')
  })

  const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })
  const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
  saveAs(blob, fileName)
}

使用示例:

const sheets = [
  {
    name: '员工信息',
    data: [
      { name: '张三', age: 25 },
      { name: '李四', age: 30 }
    ]
  },
  {
    name: '部门信息',
    data: [
      { department: '研发部', count: 50 },
      { department: '市场部', count: 30 }
    ]
  }
]

exportMultiSheetExcel(sheets, '公司信息.xlsx')

vue项目实现导出excel

标签: 项目vue
分享给朋友:

相关文章

vue实现滚动中断

vue实现滚动中断

Vue 实现滚动中断的方法 在 Vue 中实现滚动中断通常涉及监听滚动事件,并在特定条件下阻止默认行为或停止滚动。以下是几种常见方法: 监听滚动事件并阻止默认行为 通过 @scroll 或 @wh…

vue 实现长列表

vue 实现长列表

Vue 实现长列表的优化方案 虚拟滚动技术 虚拟滚动是处理长列表的高效方式,仅渲染可视区域内的元素。通过计算滚动位置动态加载和卸载DOM节点,大幅减少内存占用和渲染压力。 <template…

vue实现无线滚动列表

vue实现无线滚动列表

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

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue实现动态

vue实现动态

Vue 实现动态路由的方法 在 Vue 中实现动态路由通常涉及以下几个关键步骤: 使用 Vue Router 的动态路由匹配 通过 Vue Router 的 :param 语法可以实现动态路由匹配…

vue实现换行

vue实现换行

Vue 中实现换行的几种方法 在 Vue 中实现换行可以通过多种方式,具体取决于使用场景和需求。以下是常见的几种方法: 使用 HTML 的 <br> 标签 在模板中直接使用 <b…