如何修复谷歌表格Google Apps Script中的toUpperCase类型错误
错误原因
报错toUpperCase is not a function的根本原因是:gradeSheet.getRange(y, 1).getValue() 返回的单元格值不是字符串类型,无法调用字符串专属的toUpperCase()方法。常见触发场景包括对应单元格为空、值为数字、日期、布尔值等非字符串类型,此前函数正常运行是因为该列所有单元格取值均为字符串,近期单元格内容变更引入了非字符串值才触发报错。
修复方案
对单元格取值先做强制字符串转换,再调用toUpperCase()方法即可解决问题,同时可增加表格存在性校验提升代码健壮性,修改后的完整代码如下:
function GetRecords(username) { var ss= SpreadsheetApp.getActiveSpreadsheet(); var displaySheet = ss.getSheetByName("DISPLAY SHEETS"); if (!displaySheet) return []; // 新增校验:目标展示表不存在直接返回空 var getLastRow = displaySheet.getLastRow(); var gradeArray = []; // 提前把入参username转大写,避免循环内重复转换 var targetUsername = String(username).toUpperCase(); for(var i = 2; i <= getLastRow; i++) { var gradeSheetName = displaySheet.getRange(i, 1).getValue(); var gradeSheet = ss.getSheetByName(gradeSheetName); if (!gradeSheet) continue; // 新增校验:成绩表不存在直接跳过当前循环 var getLastRowGrade = gradeSheet.getLastRow(); for(var y = 2; y <= getLastRowGrade; y++) { // 核心修改:先把单元格值强制转字符串再调用toUpperCase var cellUsername = String(gradeSheet.getRange(y, 1).getValue()).toUpperCase(); if(cellUsername == targetUsername) { var grade = gradeSheet.getRange(y, 2).getValue(); gradeArray.push([targetUsername, gradeSheetName, grade]); } } } return gradeArray; }
额外优化说明
- 提前将入参
username转换为大写,避免循环内重复调用toUpperCase(),提升运行效率 - 新增了
DISPLAY SHEETS表和各成绩表的存在性校验,避免表名拼写错误、被删除等场景触发的额外报错 - 用
String()强制转换所有取值,空值、数字等类型会被转换为对应的字符串形式,不会再触发类型错误
内容的提问来源于stack exchange,提问作者Samuel Offsey
相关产品推荐
相关产品推荐

