有人可以帮助我解决 Google Sheets Apps 脚本中的此错误:“TypeError:无法读取未定义的属性(读取“长度”)”吗?我实际上是从 YouTube 复制了这个脚本。
请参阅下面的脚本。
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");
var data = ws.getRange("A2:G" + ws.getLastRow()).getValues();
var userSelectedRep = input.getResponseText().tolowercase;
var newData = data.filter(function(r){ return r[2] == userSelectedRep });
var newWs = ss.insertSheet(userSelectedRep);
newWs.getRange(2, 1, newData.length, newData[0].length).setValues(newData);
}
您收到的错误,
TypeError: Cannot read properties of undefined (reading 'length')
可能是因为您没有安全地访问数据,因为如果没有行与过滤条件匹配,则 newData 可能为空。
所以,下面我实现了对 newData 的检查。
另外
tolowercase
应该是 toLowerCase()
function showInputBox() {
var ui = SpreadsheetApp.getUi();
var input = ui.prompt("Please enter your Name.", ui.ButtonSet.OK_CANCEL);
// Check if OK button was clicked
if (input.getSelectedButton() == ui.Button.OK) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ws = ss.getSheetByName("original");
var data = ws.getRange("A2:G" + ws.getLastRow()).getValues();
// Convert user input to lowercase
var userSelectedRep = input.getResponseText().toLowerCase();
// Filter data based on user input
var newData = data.filter(function(r) {
return r[2].toLowerCase() == userSelectedRep; // Ensure comparison is case-insensitive
});
// Check if any data was found
if (newData.length > 0) {
// Create a new sheet and insert the filtered data
var newWs = ss.insertSheet(userSelectedRep);
newWs.getRange(2, 1, newData.length, newData[0].length).setValues(newData);
} else {
ui.alert("No matching data found for the entered name.");
}
} else {
ui.alert("Operation canceled.");
}
}