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)
    }
  }
}
相关推荐
小兔崽子去哪了4 分钟前
mitt 跨多层组件甚至兄弟组件通信
前端
罗政11 分钟前
WPS Excel快速进行同表内的单元格差异对比(高亮)
excel·wps
小禾青青33 分钟前
我用uniapp开发app用到的uniapp插件
前端·vue.js·uni-app
柳一航43 分钟前
HTML笔记
前端·笔记·html
艾小码1 小时前
为什么你的Vue组件总出bug?可能是少了这份测试指南
前端·vue.js·debug
IT_陈寒1 小时前
Redis 性能提升30%的7个关键优化策略,90%开发者都忽略了第3点!
前端·人工智能·后端
辞忧*1 小时前
基于element-Plus的el-tooltip封装公共虚拟引用组件
前端·vue.js
by__csdn1 小时前
Electron入门:跨平台桌面开发指南
前端·javascript·vue.js·typescript·electron·html
Nan_Shu_6144 小时前
学习:ES6(2)
前端·学习·es6