You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复谷歌表格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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:27:05