【纯前端实现xlsx的解析并处理成table需要的格式】

概要

xlsx纯前端导入并解析成json

整体架构流程

xlsx导入并解析成json,并与table中的数据进行对比,根据唯一标识更新对应数据项

技术名词解释

  • vue2
  • xlsx

技术细节

  1. 首先下载xlsx依赖
javascript 复制代码
npm install xlsx --save
  1. 然后在需要导入xlsx的地方


这里主要用input弹出选择文件框 这里的导入按钮自己可以用自己的按钮

需要初始化的数据

javascript 复制代码
data(){
	return{
	tableData:[]
	}
}
  1. 这个方法很重要,展示选择文件框
javascript 复制代码
triggerFileInput(){
	this.$refs.fileInput.click();
}
  1. 然后开始解析xlsx内容
javascript 复制代码
handleFileUpload(event) {
      const file = event.target.files[0];
      if (file) {
        const reader = new FileReader();
        reader.onload = (e) => {
          const data = new Uint8Array(e.target.result);
          const workbook = XLSX.read(data, { type: 'array' });
          const firstSheetName = workbook.SheetNames[0];
          const worksheet = workbook.Sheets[firstSheetName];
          const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });

          // 处理数据
          this.processData(jsonData);
        };
        reader.readAsArrayBuffer(file);
      }
    },

jsonData格式是这样的

javascript 复制代码
[
  ["变量名", "描述", "计算方式"],
  ["abcd", "婚姻状况", "async"],
  ["abcde", "婚姻状况", "sync"]
]
  1. 然后就是最关键的一步,把这个数据处理成 [{}] ,标准的数组对象格式,我要处理的数据是个表格的数据,大致长这样,这也是tableData的数据
javascript 复制代码
tableData:[
  {
    "vvv": 333,
    "varName": "abcd",
    "sort": "内部",
    "nnn": null,
    "vvv": null,
    "ccc": null,
    "aaa": "derivative",
    "dataType": "Integer",
    "version": 1,
    "description": "测试",
    "templateld": 5454,
    "templateName": "mmm",
    "dataSource": "报告",
    "explanation": "gg",
    "status": 1,
    "createDate": "2024-09-13 17:16:46",
    "history ld": 3232,
    "calculation": "sync"
  }
]
  1. "变量名", "描述", "计算方式",分别对应上面的varName,description,description字段
    接下来就是处理方法了
javascript 复制代码
processData(jsonData) {
  // 取得 Excel 数据(跳过标题行)
  const excelData = jsonData.slice(1);

  // 将 Excel 数据转换为对象数组
  const updatedData = excelData.map(row => {
    return {
      varName: row[0] ? row[0].replace(/\n/g, '') : '', // 去除换行符 
      description: row[1] || '', // 如果 row[1] 不存在,返回空字符串
      calculation: row[2] || '' // 如果 row[2] 不存在,返回空字符串
    };
  });

       // 更新 tableData
      this.tableData.forEach(baseItem => {
        const matchedItem = updatedData.find(item => item.varName === baseItem.varName);
        if (matchedItem) {
          baseItem.description = matchedItem.description;
          baseItem.calculation = matchedItem.calculation;
        }
      });
},,

注* varName: row[0] ? row[0].replace(/\n/g, '') : '', // 去除换行符

这里很关键,因为直接解析xlsx,处理成的数据带换行符/n,所有刚开始怎么都替换数据不成功,因为数据带/n

  1. 这里的数据就已经替换成功了,这里其实是批量修改数据,因为是根据varName进行匹配的,如果有不匹配也需要导入的需求自己修改一下逻辑就行。

小结

纯前端实现xlsx的解析并处理成标准table需要的格式

相关推荐
A923A8 分钟前
【从零开始学 React | 第四章】useEffect和自定义Hook
前端·react.js·fetch·useeffect
ZC跨境爬虫12 分钟前
批量爬取小说章节并优化排版(附完整可运行脚本)
前端·爬虫·python·自动化
ZC跨境爬虫14 分钟前
海南大学交友平台登录页开发实战day4(解决python传输并读取登录信息的问题)
开发语言·前端·python·flask·html
来一颗砂糖橘17 分钟前
pnpm:现代前端开发的高效包管理器
前端·pnpm
前端摸鱼匠18 分钟前
Vue 3 的defineProps编译器宏:详解<script setup>中defineProps的使用
前端·javascript·vue.js·前端框架·ecmascript
木斯佳19 分钟前
前端八股文面经大全: 美团财务科技前端一面 (2026-04-09)·面经深度解析
前端·实习面经·前端初级
天外天-亮19 分钟前
Vue2.0 + jsmind:开发思维导图
javascript·vue.js·jsmind
LIO22 分钟前
React 零基础入门,一篇搞懂核心用法(适合新手)
前端·react.js
TeamDev36 分钟前
JxBrowser 8.18.2 版本发布啦!
java·前端·跨平台·桌面应用·web ui·jxbrowser·浏览器控件
netkiller-BG7NYT37 分钟前
yoloutils - Openclaw Agent Skill
前端·webpack·node.js