Office Script中for循环内变量定义导致输出undefined的问题排查
问题排查与修复
核心问题:变量遮蔽(Variable Shadowing)
你在if块内部用let email = rgnArr[i][1];重新声明了一个局部变量email,这个变量和外部作用域的email完全独立。当匹配到ABC时,赋值的是内部的email,外部的email始终未被赋值,所以最后console.log(email)输出undefined。
修复后的代码
function main(workbook: ExcelScript.Workbook, myText: string) { let ws = workbook.getActiveWorksheet(); let rng = ws.getRange("B3:C6"); let rgnArr = rng.getValues(); let email: string | number | boolean; for (let i = 0; i <= rgnArr.length - 1; i++) { if (myText === rgnArr[i][0]) { // 去掉let,直接给外部的email变量赋值 email = rgnArr[i][1]; // 找到匹配项后跳出循环,避免不必要的遍历 break; } }; console.log(email); }
优化说明
- 移除内部的
let声明,确保赋值给外部作用域的email变量 - 启用
break语句,找到目标值后立即终止循环,提升执行效率
内容的提问来源于stack exchange,提问作者user15235239
相关产品推荐
相关产品推荐

