求助:Google Sheets Apps Script报TypeError: Cannot read properties of undefined (reading 'length')
解决Google Sheets Apps Script中的"TypeError: Cannot read properties of undefined (reading 'length')"错误
错误根源分析
toLowerCase调用错误:代码中input.getResponseText().tolowercase缺少括号,toLowerCase是字符串方法,必须通过()调用才能返回转换后的小写字符串。未加括号时userSelectedRep是函数对象,导致filter后newData为空数组,此时newData[0]为undefined,访问newData[0].length触发错误。- 未处理空数组场景:如果过滤后没有匹配数据,
newData是空数组,直接访问newData[0].length必然报错。
修复后的完整代码
function showInputBox(){ var ui = SpreadsheetApp.getUi(); var input = ui.prompt("Please enter your Name.", ui.ButtonSet.OK_CANCEL); if(input.getSelectedButton() == ui.Button.OK){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var ws = ss.getSheetByName("original"); // 检查目标工作表是否存在 if(!ws){ ui.alert("名为'original'的工作表不存在,请确认!"); return; } var lastRow = ws.getLastRow(); // 检查是否有可处理的数据行 if(lastRow < 2){ ui.alert("'original'工作表中没有可筛选的数据!"); return; } var data = ws.getRange("A2:G" + lastRow).getValues(); // 修正toLowerCase调用,转换为小写字符串 var userSelectedRep = input.getResponseText().toLowerCase(); var newData = data.filter(function(r){ // 统一转为小写再比较,避免大小写不匹配 return String(r[2]).toLowerCase() === userSelectedRep; }); // 检查筛选结果是否为空 if(newData.length === 0){ ui.alert("未找到与'" + userSelectedRep + "'匹配的数据!"); return; } var newWs = ss.insertSheet(userSelectedRep); // 写入筛选后的数据 newWs.getRange(2, 1, newData.length, newData[0].length).setValues(newData); // 复制原表表头到新表 ws.getRange(1, 1, 1, 7).copyTo(newWs.getRange(1, 1)); } }
额外优化点
- 增加工作表存在性校验,避免因工作表不存在导致后续报错
- 检查数据行是否存在,防止获取空数据范围
- 筛选时统一转换为小写再比较,避免大小写差异导致的匹配失败
- 空结果时弹出提示,提升用户体验
- 自动复制原表表头到新表,让新表结构更完整
内容的提问来源于stack exchange,提问作者Unknown Users
相关产品推荐
相关产品推荐

