xlsx.js 的使用:将 Excel 文件解析为 json

写在前面

在开发时,经常碰到导入文件的需求,有的是直接将文件或者url传给后端进行解析,但是有时,也需要前端进行解析,那么 xlsx.js 又派上了用场。

废话不多说,show me the code

使用

安装

复制代码
npm install xlsx

导入

javascript 复制代码
import * as XLSX from 'xlsx/xlsx.mjs'

需要解析的文件

对应的解析函数

ini 复制代码
export const parseExcelToJson = function( fileBlob, onloadCallback ){
  let code = 0;
  let message = "";
  let list = [];
  //验证文件格式
  if (!/.(xls|xlsx)$/.test( fileBlob.name.toLowerCase())) {
    message = "上传格式不正确,请上传xls或者xlsx格式"
    code = 1
    return {code, message, list}
  }

  //解析文件
  const fileReader = new FileReader();
  fileReader.onload = ev => {
    try {
      const data = ev.target.result;

      // 以二进制流方式读取得到整份excel表格对象
      const workbook = XLSX.read(data, {
        type: 'binary'
      });

      let index = 1;
      workbook.SheetNames.forEach(element => {
        const wsname = element // 取第一张表
        const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]) // 生成json表格内容

        // 编辑数据
        for (let i=0;i<ws.length;i++) {
          const item = ws[i];

          let sheetData = {
            namr: item["姓名"] || '',
            age: item["年龄"] || '',
          }
          list.push(sheetData);
          index++;         
        }
      });
      onload(onloadCallback({code, message, list}));
    } catch (e) {
      code = 99;
      message = "解析数据失败:" + e;
      return {code, message, list};
    }
  }
  fileReader.readAsBinaryString(fileBlob)
  return {code, message, list};
}

解析结果

啰嗦一下

  • workbook.SheetNames是一个数组,包含的元素是excel文件的工作表名称
  • workbook.Sheets是工作表对象集合,包含的属性为工作表名称,可以通过工作表名称取到对应的工作表对象
  • XLSX.utils.sheet_to_json是解析的关键,可以把工作表对象转化为json数组

More

你可以在 xlsx - npm (npmjs.com) 找到更多用法

相关推荐
Bug收容所26 分钟前
Vue+JS Day3
前端·javascript·vue.js·前端框架·1024程序员节
小白今天也很酷1 小时前
MCXN947更新板载DAP_Link固件的方法
c语言·python·单片机·ubuntu·excel·1024程序员节
用户831348593069819 小时前
Vue3 v-for:常用用法与开发高频坑点
前端·javascript·vue.js
ratel️20 小时前
小墨析 · Office Agent 日常办公不烧心
python·langchain·word·excel·fastapi·js·ppt
Logic1011 天前
没有TextSplit函数的老版本也能拆分单元格的内容
excel·拆分数据·excel技巧·数据拆分·拆分单元格·textsplit·旧版excel
2601_967987371 天前
你们都用Python实现了哪些自动化办公?
python·excel·自动化办公·1024程序员节·学习资料·跨平台操作
城数派1 天前
1901-2025年中国省/市/县三级逐月平均气温数据Excel+Shp格式
excel
林恒smileZAZ1 天前
用 Vue 3 + Electron 做桌宠:从启动退出到拖拽、单击与鼠标穿透
vue.js·electron·计算机外设
软件技术NINI1 天前
基于JavaWeb 汽车租聘
java·vue.js·spring boot·后端·python·毕业设计·毕设
2301_32241428041 天前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法