Excel Office Scripts报错Cannot find name 'myVar',求技术解决方案
解决Excel Office Scripts中变量作用域导致的
Cannot find name 'myVar'错误 问题原因
你用let在if代码块内部声明的myVar属于块级作用域,只能在这个if块的范围内访问。循环外的console.log不在这个作用域里,自然找不到这个变量,所以抛出错误。
解决方案
1. 提前在外部声明变量(单匹配场景)
在循环开始前就声明myVar,这样整个函数范围内都能访问到它,循环内部只需要赋值即可:
function main(workbook: ExcelScript.Workbook, varB: string) { let ws = workbook.getActiveWorksheet(); let rng = ws.getRange("B3:E5") let rgnArr = rng.getValues(); // 提前声明变量并赋予初始值,避免未赋值就使用 let myVar: any = undefined; for(let i = 0; i <= rgnArr.length - 1; i++){ if(varB == rgnArr[i][0]){ // 直接赋值,不再重复声明 myVar = rgnArr[i][3]; // 找到匹配项后可添加break终止循环,提升效率 break; } }; console.log(myVar); }
2. 用数组存储多匹配结果(多匹配场景)
如果你的数据中可能有多个和varB匹配的项,可以把myVar声明为数组,收集所有匹配结果:
function main(workbook: ExcelScript.Workbook, varB: string) { let ws = workbook.getActiveWorksheet(); let rng = ws.getRange("B3:E5") let rgnArr = rng.getValues(); // 声明数组存储所有匹配值 let myVar: any[] = []; for(let i = 0; i <= rgnArr.length - 1; i++){ if(varB == rgnArr[i][0]){ myVar.push(rgnArr[i][3]); } }; console.log(myVar); }
内容的提问来源于stack exchange,提问作者user15235239
相关产品推荐
相关产品推荐

