vue3前端解析excel文件


基础解析流程

项目开发中遇到需要前端解析excel文件,主要分为以下核心步骤:

  1. 读取excel文件数据(二进制/缓冲区)
  2. 解析为workbook(工作簿)对象
  3. 提取目标工作表(worksheet)
  4. 转换为JSON/数据可操作的格式

前端解析

使用 上传Excel后解析

安装XLSX库

javascript 复制代码
npm install xlsx

vue代码

javascript 复制代码
 <el-button type="primary" @click="updatefile">导入excel</el-button>
    <!-- 隐藏的文件上传输入框 -->
    <input ref="fileInputRef" type="file" accept=".xlsx, .xls" @change="handleFileUpload" style="display: none" />

    <el-table :data="tableList">
      <el-table-column label="表格1" prop="name1" />
      <el-table-column label="表格2" prop="name2" />
      <el-table-column label="表格3" prop="name3" />
      <el-table-column label="表格4" prop="name4" />
      <el-table-column label="表格5" prop="name5" />
      <el-table-column label="表格6" prop="name6" />
      <el-table-column label="表格7" prop="name7" />
    </el-table>

js代码

javascript 复制代码
import { ref } from 'vue'
import * as XLSX from 'xlsx'
const message = useMessage()
const fileInputRef = ref()
const tableList = ref<any[]>([])
// 点击上传按钮触发文件选择
const updatefile = () => {
  if (fileInputRef.value) {
    fileInputRef.value.click()
  }
}
// 文件上传 
const handleFileUpload = (event: Event) => {
  const target = event.target as HTMLInputElement
  const files = target.files
  if(files && files.length > 0) {
    const file = files[0]
    // 检查文件类型
    const validTypes = [
      'application/vnd.ms-excel',
      'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
      '.xlsx',
      '.xls'
    ]
    const isExcel = validTypes.some((type) => file.type.includes(type) || file.name.endsWith(type))
    if (!isExcel) {
      return message.error('请上传正确的文件格式')
    }
    const reader = new FileReader()
    try {
      reader.onload = async (e) => {
        const data = e.target?.result
  
        const workbook = XLSX.read(data, { type: 'array' })
        const sheetName = workbook.SheetNames[0]
        const worksheet = workbook.Sheets[sheetName]
        // 将工作表转换为json数据
        const jsonData = XLSX.utils.sheet_to_json(worksheet)
        tableList.value = jsonData
      }
      // 核心: 在 onload 定义后,调用 readAsArrayBuffer 触发读取
      reader.readAsArrayBuffer(file)

		// 可选:监听读取错误
	  reader.onerror = () => {
	    message.error('文件读取错误,请重试');
	  }
    } catch (error) { 
      console.log('error', error)
    }
  }
}
相关推荐
华玥作者18 小时前
[特殊字符] VitePress 对接 Algolia AI 问答(DocSearch + AI Search)完整实战(下)
前端·人工智能·ai
Mr Xu_18 小时前
告别冗长 switch-case:Vue 项目中基于映射表的优雅路由数据匹配方案
前端·javascript·vue.js
前端摸鱼匠18 小时前
Vue 3 的toRefs保持响应性:讲解toRefs在解构响应式对象时的作用
前端·javascript·vue.js·前端框架·ecmascript
lang2015092818 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
好家伙VCC19 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
未来之窗软件服务20 小时前
未来之窗昭和仙君(六十五)Vue与跨地区多部门开发—东方仙盟练气
前端·javascript·vue.js·仙盟创梦ide·东方仙盟·昭和仙君
嘿起屁儿整20 小时前
面试点(网络层面)
前端·网络
VT.馒头20 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
phltxy21 小时前
Vue 核心特性实战指南:指令、样式绑定、计算属性与侦听器
前端·javascript·vue.js
Byron07071 天前
Vue 中使用 Tiptap 富文本编辑器的完整指南
前端·javascript·vue.js