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)
    }
  }
}
相关推荐
90后的晨仔4 小时前
在 macOS 上轻松获取 GIF 图片总时长:多种实用方法详解
前端
mapbar_front4 小时前
顺利通过试用期:避开三大陷阱,掌握三个关键点
前端·面试
韩立学长4 小时前
【开题答辩实录分享】以《智慧校园勤工俭学信息管理系统的设计与实现》为例进行答辩实录分享
vue.js·spring boot·微信小程序
why技术4 小时前
1K+Star的开源项目能给一个在校大学生带来什么?
前端·人工智能·后端
@PHARAOH4 小时前
HOW - localstorage 超时管理方案
前端·javascript·vue.js
im_AMBER5 小时前
React 05
开发语言·前端·javascript·笔记·学习·react.js·前端框架
showker5 小时前
ecstore等产品开启缓存-后台及前台不能登录原因-setcookie+session问题
java·linux·前端
DokiDoki之父5 小时前
前端速通—Vue_简介 & 第一个Vue程序 & el:挂载点 & data:数据对象 & Vue指令
javascript·vue.js·ecmascript
csj506 小时前
前端基础之《React(4)—webpack简介-编译打包优化》
前端·react