当前位置:首页 > VUE

vue实现导入导出

2026-01-17 07:23:04VUE

Vue 实现导入功能

使用 input 标签的 type="file" 属性实现文件选择,通过 FileReader API 读取文件内容。

<template>
  <input type="file" @change="handleFileImport" accept=".xlsx,.csv,.json" />
</template>

<script>
export default {
  methods: {
    handleFileImport(event) {
      const file = event.target.files[0]
      if (!file) return

      const reader = new FileReader()
      reader.onload = e => {
        const content = e.target.result
        // 处理文件内容
        console.log(content)
      }
      reader.readAsText(file) // 或 readAsArrayBuffer 等
    }
  }
}
</script>

对于 Excel 文件处理,推荐使用 xlsx 库:

npm install xlsx
import * as XLSX from 'xlsx'

handleFileImport(event) {
  const file = event.target.files[0]
  const reader = new FileReader()
  reader.onload = e => {
    const data = new Uint8Array(e.target.result)
    const workbook = XLSX.read(data, { type: 'array' })
    const firstSheet = workbook.Sheets[workbook.SheetNames[0]]
    const jsonData = XLSX.utils.sheet_to_json(firstSheet)
    console.log(jsonData)
  }
  reader.readAsArrayBuffer(file)
}

Vue 实现导出功能

创建 Blob 对象并使用 URL.createObjectURL 生成下载链接。

<template>
  <button @click="exportToCSV">导出CSV</button>
</template>

<script>
export default {
  methods: {
    exportToCSV() {
      const data = [
        ['姓名', '年龄', '城市'],
        ['张三', 25, '北京'],
        ['李四', 30, '上海']
      ]

      let csvContent = data.map(row => row.join(',')).join('\n')
      const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' })
      const link = document.createElement('a')
      link.href = URL.createObjectURL(blob)
      link.download = 'data.csv'
      link.click()
    }
  }
}
</script>

对于 Excel 导出:

exportToExcel() {
  const data = [
    { name: '张三', age: 25, city: '北京' },
    { name: '李四', age: 30, city: '上海' }
  ]

  const worksheet = XLSX.utils.json_to_sheet(data)
  const workbook = XLSX.utils.book_new()
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
  XLSX.writeFile(workbook, 'data.xlsx')
}

高级功能实现

实现带样式的 Excel 导出:

const ws = XLSX.utils.aoa_to_sheet([
  ["姓名", "年龄", "城市"],
  ["张三", 25, "北京"]
])
ws['!cols'] = [{wch:10}, {wch:5}, {wch:8}] // 列宽
XLSX.writeFile({ Sheets: { '数据': ws }, SheetNames: ['数据'] }, 'styled.xlsx')

实现大数据量分块导出:

async function exportLargeData() {
  const chunkSize = 10000
  let offset = 0
  const workbook = XLSX.utils.book_new()

  while(offset < totalRecords) {
    const chunk = await fetchData(offset, chunkSize)
    const ws = XLSX.utils.json_to_sheet(chunk)
    XLSX.utils.book_append_sheet(workbook, ws, `数据_${offset/chunkSize+1}`)
    offset += chunkSize
  }

  XLSX.writeFile(workbook, 'large_data.xlsx')
}

注意事项

文件类型验证应在导入前进行:

const validTypes = ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']
if (!validTypes.includes(file.type)) {
  alert('请上传有效的Excel文件')
  return
}

处理中文编码问题:

const blob = new Blob(['\uFEFF' + csvContent], { type: 'text/csv;charset=utf-8;' })

服务器端导出实现示例(Node.js):

vue实现导入导出

router.get('/export', (req, res) => {
  const workbook = XLSX.utils.book_new()
  const worksheet = XLSX.utils.json_to_sheet(data)
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')

  res.setHeader(
    'Content-Type',
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  )
  res.setHeader('Content-Disposition', 'attachment; filename=export.xlsx')

  const buffer = XLSX.write(workbook, { type: 'buffer' })
  res.end(buffer)
})

标签: vue
分享给朋友:

相关文章

vue怎么实现文件树

vue怎么实现文件树

Vue 实现文件树的方法 使用递归组件 递归组件是处理嵌套数据结构的理想方式。文件树通常包含文件夹和文件的嵌套结构,适合用递归组件实现。 <template> <ul>…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…

vue实现答题

vue实现答题

Vue 实现答题功能 数据结构设计 使用 Vue 的响应式特性管理题目和答案数据。通常需要以下数据结构: data() { return { questions: [ {…

vue实现ide

vue实现ide

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

vue实现系统

vue实现系统

Vue 实现系统的核心方法 使用 Vue.js 构建系统时,需结合其响应式特性与组件化开发模式。以下为关键实现路径: 项目初始化与工程配置 通过 Vue CLI 或 Vite 创建项目骨架,推荐选择…