TypeError:无法读取谷歌表格中未定义的属性(读取“长度”)

问题描述 投票:0回答:1

有人可以帮助我解决 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);

}
google-apps-script appscript
1个回答
0
投票

您收到的错误,

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.");
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.