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
相关产品推荐
相关产品推荐

