如果Google脚本中的if语句为true,则其他语句仍在运行

时间:2020-08-12 02:25:02

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

我有一个函数,该函数的名称带有一组数据,并且将该名称与名称列表进行比较。如果该名称已在名称列表中,则与该名称关联的数据将替换旧数据。如果名称不是名称列表中的名称,则会将名称和相关信息添加到列表底部。

由于某种原因,当我使用列表中已经存在的名称运行代码时,原始数据将被替换,名称和数据将添加到列表的底部。我想避免重复别人,同时还要增加新的个人。

  var app = SpreadsheetApp;
  var activeSheet = app.getActiveSpreadsheet();
  var lookup = app.getActiveSpreadsheet().getSheetByName("Lookup");
  var issued = app.getActiveSpreadsheet().getSheetByName("Issued");
  var name1 = lookup.getRange(12,3).getValue();
  var info = lookup.getRange(16,3,1,12).getValues();
  
for (var j=1;j<105;j++){
    var issuedOfficers = issued.getRange(j,11).getValue();
//if the officers name is already recorded in issued the system will replace the current data with updated data
    if (issuedOfficers === name1){
      issued.getRange(j,1,1,12).setValues(info);
    } else {
      var lastrow = issued.getLastRow();
      issued.getRange(lastrow+1,1,1,12).setValues(info);
      break;
    }
}
}```

1 个答案:

答案 0 :(得分:0)

该修改如何?

修改点:

在您的脚本中,

  • j1并且issuedOfficers === name1true时,运行issued.getRange(j,1,1,12).setValues(info)。并且,当j2并且issuedOfficers === name1false时,运行issued.getRange(lastrow+1,1,1,12).setValues(info)。并且for循环已完成。
  • j1并且issuedOfficers === name1false时,运行issued.getRange(lastrow+1,1,1,12).setValues(info)。并且for循环已完成。

我认为这是您遇到问题的原因。为了避免此问题,如何进行以下修改?

修改后的脚本:

从:
for (var j=1;j<105;j++){
    var issuedOfficers = issued.getRange(j,11).getValue();
//if the officers name is already recorded in issued the system will replace the current data with updated data
    if (issuedOfficers === name1){
      issued.getRange(j,1,1,12).setValues(info);
    } else {
      var lastrow = issued.getLastRow();
      issued.getRange(lastrow+1,1,1,12).setValues(info);
      break;
    }
}
至:
var names = issued.getRange(1, 11, 105, 1).getValues().flat();
var index = names.indexOf(name1);
if (index > -1) {
  issued.getRange(index + 1,1,1,12).setValues(info);
} else {
  issued.appendRow(info[0]);
}
  • 在此修改中,首先,从issued的工作表中检索值,然后检查值中是否包含name1。这样,将更新行或附加值。

注意:

  • 请在启用V8的情况下使用此脚本。

参考文献: