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)
    }
  }
}
相关推荐
源图客16 小时前
Claude Code基础使用
服务器·前端·数据库
asdzx6716 小时前
在 React 中轻松实现 PDF 转 Word:纯前端 WASM 方案实战
前端·react.js·pdf
daols8816 小时前
vue 甘特图 vxe-gantt 实现双进度条:计划 vs 实际,支持多级子任务拆分
vue.js·甘特图·vxe-table·vxe-gantt
爱勇宝1 天前
第 1 章:别把“需求文档”当成真正的需求
前端·后端·程序员
梨子同志1 天前
常用命令
前端
梨子同志1 天前
React 状态管理
前端
Dxy12393102161 天前
MySQL索引完整教程:创建、查看、修改、删除与日常管理
前端·javascript·mysql
剪刀石头布啊1 天前
js能被遍历的集合有哪些特征,为何能被遍历
前端
剪刀石头布啊1 天前
js解构
前端
剪刀石头布啊1 天前
防抖功能的逐步递进
前端