首页 > 解决方案 > 谷歌脚本如果函数在迭代期间不会调用

问题描述

我的工作表有一个 Vlookup,它检查名称是否存在,如果不存在,则会产生错误消息。以下代码旨在检查每个单元格是否包含错误消息,以及是否通过附加到两个数组来将其标记给用户。一个包含错误名称,一个包含错误行。我知道,通过 Logger.log(),迭代有效,但由于某种原因,函数中没有调用 IF 语句。

function nameCheck(){
  var numEmail = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Validations').getRange('D2').getValue();
  Logger.log(numEmail)
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Input');
   var startRow = 1;
  var numRows = numEmail
  var invalid = []
  var rowWithError = []
  var dataRange = ss.getRange(startRow, 9, numRows, 9);
  var data = dataRange.getValues();
  for (var i in data){
    var row = data[i];
    Logger.log(row)
      if (row == "Please Check Name, , , , , , , ,  ") {
        var wrongName = ss.getRange('A' + row)
        var invalid = invalid.push(wrongName)
        var rowWithError = rowWithError.push(row[i])
    }
      else{}
  } 
  if (invalid.length != 0){
    var ui = SpreadsheetApp.getUi();
    var ui = SpreadsheetApp.getUi();
        ui.alert(
          "The sheet had detected an invalid Name - '" + invalid + "', please check row " + rowWithError + " and try again.",)
  }
  else{}
}

任何帮助都会很棒,因为我是新手

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


修改点:

  • 在您的脚本中,data从 的范围内检索ss.getRange(startRow, 9, numRows, 9),并且rowdata[i]二维数组。在这种情况下,row是具有 9 个元素的一维数组。由此,if (row == "Please Check Name, , , , , , , , ") {总是假的。invalid.length总是如此0。我认为这可能是您的问题的原因。
  • 从您的角度"Please Check Name, , , , , , , , "来看if (row == "Please Check Name, , , , , , , , ") {,我认为该值可能是该行的文本连接单元格值。
  • push返回数组长度。所以var invalid = invalid.push(wrongName)var rowWithError = rowWithError.push(row[i])都运行,invalid并且rowWithError是数组长度。
  • 我认为这var ui = SpreadsheetApp.getUi();可以宣布一次。

如果我的理解是正确的,那么下面的修改呢?

修改后的脚本:

从:
for (var i in data){
  var row = data[i];
  Logger.log(row)
    if (row == "Please Check Name, , , , , , , ,  ") {
      var wrongName = ss.getRange('A' + row)
      var invalid = invalid.push(wrongName)
      var rowWithError = rowWithError.push(row[i])
  }
    else{}
} 
if (invalid.length != 0){
  var ui = SpreadsheetApp.getUi();
  var ui = SpreadsheetApp.getUi();
      ui.alert(
        "The sheet had detected an invalid Name - '" + invalid + "', please check row " + rowWithError + " and try again.",)
}
else{}
至:
data.forEach((row, i) => {
  if (row.join(",") == "Please Check Name, , , , , , , ,  ") {
    var wrongName = ss.getRange('A' + (i + 1)).getValue();
    invalid.push(wrongName);
    rowWithError.push(row);  // or rowWithError.push(row.join(","))
  }
  if (invalid.length != 0){
    var ui = SpreadsheetApp.getUi();
    ui.alert(
    "The sheet had detected an invalid Name - '" + invalid.pop() + "', please check row " + rowWithError.pop() + " and try again.",)
  }
});

笔记:

  • 根据您的问题,我无法理解您的实际电子表格。因此,当上述建议的修改不是直接解决方案时,您能否提供您的示例电子表格以复制您的问题,并提供您目标的详细信息?借此,我想确认一下。

  • 当然,在您的情况下,我认为也可以使用字符串变量来代替数组,如下所示。

      var invalid = "";
      var rowWithError = "";
      data.forEach((row, i) => {
        if (row.join(",") == "Please Check Name, , , , , , , ,  ") {
          var wrongName = ss.getRange('A' + (i + 1)).getValue();
          invalid = wrongName;
          rowWithError = row.join(",");
        }
        if (invalid.length != 0){
          var ui = SpreadsheetApp.getUi();
          ui.alert(
          "The sheet had detected an invalid Name - '" + invalid + "', please check row " + rowWithError + " and try again.",)
        }
      });
    

参考:


推荐阅读