前端解析excel

第一步:安装xlsx;

npm install xlsx

第二步:将文件解析成json

2.1使用并获取excel中sheet1、sheet2的对应数据

复制代码
    const workbook = (await excelToJsonAll(e.file)) || [];
    const sheetNameArr = workbook.SheetNames.filter((item) =>
      item.includes('_Schema'),
    );
    let sheet1, sheet2;
    if (sheetNameArr.length > 0) {
      // 解析出来包含_Schema的sheet
      sheet1 = getIndexSheetData(workbook, 1);
      sheet2 = getIndexSheetData(workbook, 2);
    } else {
      sheet1 = getIndexSheetData(workbook, 0);
      sheet2 = getIndexSheetData(workbook, 1);
    }

2.2封装解析方法

复制代码
// 从工作簿中获取第几个工作表的数据
export function getIndexSheetData(
  workbook: WorkBook,
  index: number = 0,
): any[] {
  const firstSheetName = workbook.SheetNames[index];
  if (!firstSheetName) {
    throw new Error('No sheets found in the workbook');
  }

  const workSheet = workbook.Sheets[firstSheetName];
  if (!workSheet) {
    throw new Error(`Sheet "${firstSheetName}" not found in the workbook`);
  }

  return utils.sheet_to_json(workSheet);
}


// 读取 Excel 文件并转换为 JSON 数据
export async function excelToJsonAll(file: File) {
  const buffer = await file.arrayBuffer(); // 读取文件并转换为 ArrayBuffer

  const data = new Uint8Array(buffer);
  const workbook = read(data, { type: 'array' });
  // 对第一个进行校验是否有
  const firstSheetName = workbook.SheetNames[0];
  if (!firstSheetName) {
    throw new Error('No sheets found in the workbook');
  }

  const workSheet = workbook.Sheets[firstSheetName];
  if (!workSheet) {
    throw new Error(`Sheet "${firstSheetName}" not found in the workbook`);
  }

  return workbook;
}

第三步:获取excel的数据

复制代码
let data=[] 
for (const material of sheet1) {
      const value= toString(material['表头文字']);
      ....
      data.push(value)
}
相关推荐
kyriewen7 小时前
Anthropic 估值逼近万亿美元,Claude Sonnet 5 + Claude Science 一天两连发
前端·ai编程·claude
小徐_23338 小时前
Wot UI 2.2.0 发布:Button 新增 subtle,VideoPreview 预览体验继续增强
前端·微信小程序·uni-app
天蓝色的鱼鱼11 小时前
关于 CSS 你可能不知道的属性,但关键时刻很有用
前端·css
泯泷11 小时前
第 2 篇:设计第一套字节码:Opcode、Instruction 与 Constant Pool
前端·javascript·安全
妙码生花11 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十五):优化细节、网络请求封装
前端·后端·ai编程
泯泷11 小时前
第 1 篇:从 1 + 2 开始:亲手写出第一台 JSVM
前端·javascript·安全
团团崽_七分甜11 小时前
Spring Boot 核心知识点总结
前端
lichenyang45312 小时前
从一个按钮开始,理解 ASCF 框架到底在做什么
前端
古夕12 小时前
第三方 SSO 接入实践:redirect_uri 编码、回调一致性与跨项目联调
前端·vue.js