【问题标题】:Google Sheets App Script If Else not working谷歌表格应用脚本如果不工作
【发布时间】:2021-11-24 04:23:49
【问题描述】:

Test1工作表

Test2工作表

我想比较 Test1 A Column 中的 News01 和 Test2 A Column,并需要获取对应的 Test2 B 列价值

所以结果应该是 Sheet1 B 列中的 Finance

但如果我使用 else,即使 if 语句为真,它也会使用 else 语句。 如果我删除 else 语句,那么 if 语句正在工作。

不知道为什么当if语句为真时,默认为else语句

function test() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var source_sheet = sheet.getSheetByName("Test1");
  var target_sheet = sheet.getSheetByName("Test2");
  var lastRow = source_sheet.getLastRow();
  var inputs = source_sheet.getRange('A' + lastRow).getValues().flat();
  var days = target_sheet.getRange('A1:A').getValues().flat();
  var codes = target_sheet.getRange('B1:B').getValues().flat();

  inputs.forEach(function(input, count){
    for(var i = 0; i < days.length; i++){
      if(days[i].trim() == input.trim()){
        source_sheet.getRange('B' + (count + source_sheet.getLastRow())).setValue(codes[i]);
        Logger.log(codes[i]);
        break;
      }
      else{
        Logger.log("News not found")
      }
    
    }
  });
}

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。不幸的是,我无法理解But If I use else, even when if statement is true it's going to else statement.。可以问一下具体情况吗?
  • If 语句在我在问题中附加的脚本中为真。所以我的输出应该是 Finance 但是当我运行脚本时,我从 else 语句中得到 News not found。所以,我不知道,当 if 语句为真时,它应该进入 if 语句。但这将是 else 声明。如果我删除 else 语句,则 If 语句按预期工作。
  • 感谢您的回复。从您的示例输入情况来看,我认为当您的脚本运行时,days[i].trim() == input.trim() 在第一个循环中是false。而且,在第二个循环中,days[i].trim() == input.trim() 是true。这样,setValue 的脚本就会运行。这个流程怎么样?

标签: javascript if-statement google-apps-script google-sheets


【解决方案1】:

您正在记录News not found 与Test2 的所有行的每次比较,这是不正确的。

相反,您应该只在比较完成后记录。

function test() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var source_sheet = sheet.getSheetByName("Test1");
  var target_sheet = sheet.getSheetByName("Test2");
  var lastRow = source_sheet.getLastRow();
  var inputs = source_sheet.getRange('A' + lastRow).getValues().flat();
  var days = target_sheet.getRange('A1:A').getValues().flat();
  var codes = target_sheet.getRange('B1:B').getValues().flat();

  inputs.forEach(function(input, count){
    let found = false;
    for(var i = 0; i < days.length; i++){
      if(days[i].trim() == input.trim()){
        source_sheet.getRange('B' + (count + source_sheet.getLastRow())).setValue(codes[i]);
        Logger.log(codes[i]);
        found = true;
        break;
      }
    }
    if (!found) { Logger.log("News not found"); }
  });
}

或者简单地说,

function test() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var source_sheet = sheet.getSheetByName("Test1");
  var target_sheet = sheet.getSheetByName("Test2");
  var lastRow = source_sheet.getLastRow();
  var inputs = source_sheet.getRange('A' + lastRow).getValues().flat();
  var days = target_sheet.getRange('A1:A').getValues().flat();
  var codes = target_sheet.getRange('B1:B').getValues().flat();

  inputs.forEach(function(input, count){
    for(var i = 0; i < days.length; i++){
      if(days[i].trim() == input.trim()){
        source_sheet.getRange('B' + (count + source_sheet.getLastRow())).setValue(codes[i]);
        Logger.log(codes[i]);
        return;
      }
    }
    Logger.log("News not found");
  });
}

【讨论】:

    【解决方案2】:
    function test() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sh1 = ss.getSheetByName("Sheet0");
      var sh2 = ss.getSheetByName("Sheet1");
      var lastRow = sh1.getLastRow();
      var vs1 = sh1.getRange(1,1,sh1.getLastRow()).getValues().flat().map(e => e.trim());
      var vs2 = sh2.getRange(1,1,sh2.getLastRow(),2).getValues();
      vs2.forEach(r => {
        if(~vs1.indexOf(r[0].trim())) {
           Logger.log(r[1]);
        }
      });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2016-10-08
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多