当前位置:首页 > VUE

vue实现导出excel模板

2026-02-21 06:44:46VUE

使用xlsx和file-saver库导出Excel模板

安装必要的依赖库:

npm install xlsx file-saver --save

创建导出工具函数:

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

export function exportExcelTemplate(headers, data, fileName = 'template.xlsx') {
  const workbook = XLSX.utils.book_new()
  const worksheet = XLSX.utils.json_to_sheet([])

  // 设置表头
  XLSX.utils.sheet_add_aoa(worksheet, [headers], { origin: 'A1' })

  // 添加数据
  if (data && data.length) {
    XLSX.utils.sheet_add_json(worksheet, data, { origin: 'A2', skipHeader: true })
  }

  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)
}

在Vue组件中使用导出功能

定义表头和数据:

vue实现导出excel模板

const headers = ['姓名', '年龄', '部门']
const sampleData = [
  { 姓名: '张三', 年龄: 28, 部门: '技术部' },
  { 姓名: '李四', 年龄: 32, 部门: '市场部' }
]

调用导出方法:

methods: {
  exportTemplate() {
    this.$nextTick(() => {
      exportExcelTemplate(headers, sampleData, '员工信息模板.xlsx')
    })
  }
}

添加样式和格式控制

创建带样式的Excel模板:

vue实现导出excel模板

function exportStyledTemplate() {
  const workbook = XLSX.utils.book_new()
  const worksheet = XLSX.utils.aoa_to_sheet([
    ['姓名', '年龄', '部门'],
    ['张三', 28, '技术部'],
    ['李四', 32, '市场部']
  ])

  // 设置列宽
  worksheet['!cols'] = [{ wch: 15 }, { wch: 10 }, { wch: 20 }]

  XLSX.utils.book_append_sheet(workbook, worksheet, '员工表')
  XLSX.writeFile(workbook, '带样式的模板.xlsx')
}

处理复杂数据结构

转换嵌套对象为平面结构:

function flattenData(data) {
  return data.map(item => ({
    '姓名': item.name,
    '年龄': item.age,
    '部门': item.department.name,
    '职位': item.position
  }))
}

实现前端动态模板生成

根据用户选择生成不同模板:

function generateDynamicTemplate(fields) {
  const headers = fields.map(f => f.label)
  const data = fields.map(f => ({ [f.label]: f.example || '' }))

  exportExcelTemplate(headers, data, '动态模板.xlsx')
}

注意事项

  • 中文内容需要确保文件编码为UTF-8
  • 大数据量导出建议分页处理
  • 表头与数据字段需要严格对应
  • 浏览器兼容性问题需要考虑IE的polyfill
  • 移动端导出功能需要测试不同环境

标签: 模板vue
分享给朋友:

相关文章

vue实现密码

vue实现密码

Vue 密码输入组件实现 基础密码输入框实现 使用 Vue 的 v-model 指令绑定数据,并通过 type="password" 设置输入类型为密码: <template> &…

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

vue实现签章

vue实现签章

Vue 实现签章功能 签章功能通常包括手写签名、电子印章等。以下是基于 Vue 的实现方法: 使用 canvas 实现手写签名 安装依赖(如需要): npm install signature_p…

vue首页实现

vue首页实现

实现Vue首页的基本步骤 创建一个Vue首页通常涉及项目初始化、页面结构设计、路由配置和组件开发。以下是具体实现方法: 初始化Vue项目 使用Vue CLI或Vite快速搭建项目结构: npm i…

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…

vue实现uuid

vue实现uuid

使用 uuid 库生成 UUID 在 Vue 项目中,可以使用 uuid 库来生成 UUID。安装依赖: npm install uuid 在 Vue 组件中使用: import { v4 as…