Google Apps Script循环中调用indexOf报TypeError的问题求助
问题原因
循环中部分rngNamesSearch[i][0]并非字符串类型,而indexOf是字符串专属方法,非字符串值调用该方法会直接抛出TypeError。你单独测试第5个元素正常,但电子表格数据里大概率存在数字、空值(null)或其他非字符串类型的单元格——这些值在Browser.msgBox里会被自动转成字符串显示,所以看起来输出正常,但直接调用indexOf就会触发错误。
解决方案
在调用indexOf前,强制将目标单元格值转换为字符串,确保无论单元格原始类型是什么,都能正常调用方法:
修改循环内的代码如下:
for(var i = 0;i<rngNamesSearch.length;i++){ var cellValue = String(rngNamesSearch[i][0]); // 强制转换为字符串类型 Browser.msgBox(cellValue); Browser.msgBox(cellValue.indexOf(customerName)); var nameIndex = cellValue.indexOf(customerName); if(nameIndex > -1){ rngNamesMatch[namesMatchCount]=[]; rngNamesMatch[namesMatchCount].push(rngNamesSearch[i][0],rngNamesSearch[i][2]); namesMatchCount++; } }
另外,你创建customerName时用了new String(),这会生成一个String对象而非原始字符串(虽然不影响indexOf调用,但没必要),推荐直接使用原始值:
var customerName = prompt_customerName.getResponseText(); // 去掉new String()
额外说明
getDataRange().getValues()返回的数组会严格保留单元格的原始类型:数字是Number,空单元格是null,文本是String。Browser.msgBox会自动将任何输入值转为字符串显示,这就是为什么你在弹窗里看到内容正常,但实际代码调用方法时会报错的原因。
内容的提问来源于stack exchange,提问作者Leigh Pettit
相关产品推荐
相关产品推荐

