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

使用示例:

vue项目实现导出excel

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

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

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

相关文章

vue实现检测数组

vue实现检测数组

Vue 中检测数组变化的方法 Vue 的响应式系统无法直接检测到数组的某些变化,因为 JavaScript 的限制。以下是一些解决方案: 使用 Vue.set 或 this.$set Vue 提供…

vue 实现菜单

vue 实现菜单

Vue 实现菜单的方法 使用 Vue 实现菜单可以通过多种方式,以下是几种常见的方法: 使用 Vue Router 实现动态路由菜单 通过 Vue Router 可以动态生成菜单,根据路由配置自动渲…

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr.…

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…