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)
    }
  }
}
相关推荐
king王一帅8 小时前
Incremark 0.3.0 发布:双引擎架构 + 完整插件生态,AI 流式渲染的终极方案
前端·人工智能·开源
转转技术团队8 小时前
HLS 流媒体技术:畅享高清视频,忘却 MP4 卡顿的烦恼!
前端
程序员的程9 小时前
我做了一个前端股票行情 SDK:stock-sdk(浏览器和 Node 都能跑)
前端·npm·github
KlayPeter9 小时前
前端数据存储全解析:localStorage、sessionStorage 与 Cookie
开发语言·前端·javascript·vue.js·缓存·前端框架
沉默-_-9 小时前
从小程序前端到Spring后端:新手上路必须理清的核心概念图
java·前端·后端·spring·微信小程序
裴嘉靖9 小时前
前端获取二进制文件并预览的完整指南
前端·pdf
李剑一9 小时前
uni-app使用瓦片实现离线地图的两种方案
前端·trae
木易 士心9 小时前
深入剖析:按下 F5 后,浏览器前端究竟发生了什么?
前端
+VX:Fegn08959 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
vue.js·spring boot·课程设计
几何心凉9 小时前
离开舒适区之后:从三年前端到 CS 硕士——我在韩国亚大读研的得失
前端·人工智能·年度总结