You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XLSX读取Excel后给全局数组赋值JSON对象报错如何解决

问题解决方案

1. 解决 Uncaught TypeError: Cannot read properties of undefined (reading 'push') 报错

该报错的核心原因是你调用push方法时,objectArray的值为undefined,对应修复方案如下:

  • 全局作用域顶部显式初始化数组,不要只声明不赋值:
// 正确写法
let objectArray = [];
// 错误写法,初始值为undefined,调用push会报错
// let objectArray;
  • 排查作用域冲突:检查是否在局部函数内重复声明了同名的objectArray变量,局部声明会覆盖全局变量,若局部变量未初始化就调用push也会触发该报错。

2. 解决全局数组始终为空的问题

该问题是XLSX读取文件的异步特性导致的:你在文件读取完成的回调执行前就访问了objectArray,此时文件还未解析完成,数组自然是空的。修复方案如下:

  • 将所有需要使用objectArray的逻辑,都放到文件读取完成的回调内部执行,也可以用Promise封装读取逻辑,通过async/await等待读取完成后再操作数组,示例代码如下:
let objectArray = [];
// 封装Promise版的Excel读取方法
function readExcel(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = e => {
      const workbook = XLSX.read(e.target.result, { type: 'binary' });
      const sheet = workbook.Sheets[workbook.SheetNames[0]];
      const rows = XLSX.utils.sheet_to_json(sheet);
      rows.forEach(row => objectArray.push(JSON.stringify(row)));
      resolve(objectArray);
    };
    reader.onerror = reject;
    reader.readAsBinaryString(file);
  });
}

// 调用示例
async function processExcel(file) {
  await readExcel(file);
  // 读取完成后再调用其他需要用到objectArray的函数
  otherFunction(objectArray);
}

3. 解决 Callback is not a function 报错

该报错的原因是你调用的Callback实际不是函数类型,修复方案如下:

  • 检查Callback的定义,确保你已经提前声明了该函数,且拼写、大小写完全匹配(JavaScript变量大小写敏感,callback和Callback是两个完全不同的变量)。
  • 调用前可以增加类型校验避免报错:
if (typeof Callback === 'function') {
  Callback(objectArray);
}

内容的提问来源于stack exchange,提问作者Ali.Nemat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:15:01