Javascript 使用数组循环将值与另一个电子表格进行比较,并写入新值

Javascript 使用数组循环将值与另一个电子表格进行比较,并写入新值,javascript,arrays,google-apps-script,Javascript,Arrays,Google Apps Script,大家好,我在项目中实现数组循环时遇到问题。。。这是我想做的 我有一个名为“红皮书”的电子表格。一旦工作人员更新了该表格,该表格就会定期更新。我有一个列,他们可以在其中选择提交刚刚在特定行上输入的数据。编辑该列将调用OneEdit函数 然后,数据将被写入另一个电子表格文件,称为原始数据 对于每次提交,我都有一个唯一的标识符。我需要onEdit代码来执行以下操作 遍历列A以查找唯一标识符 找到后,更新第1列到第5列中的数据 以下是我迄今为止的脚本: function TransferToAppDat

大家好,我在项目中实现数组循环时遇到问题。。。这是我想做的

我有一个名为“红皮书”的电子表格。一旦工作人员更新了该表格,该表格就会定期更新。我有一个列,他们可以在其中选择提交刚刚在特定行上输入的数据。编辑该列将调用OneEdit函数

然后,数据将被写入另一个电子表格文件,称为原始数据

对于每次提交,我都有一个唯一的标识符。我需要onEdit代码来执行以下操作

遍历列A以查找唯一标识符 找到后,更新第1列到第5列中的数据 以下是我迄今为止的脚本:

function TransferToAppData(e) {
  var destFile = SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
  var destSheet = destFile.getSheetByName("Raw App Data");
  var ss = e.source;
  var s = ss.getActiveSheet();
  var uniConstRng = s.getRange("A1");
  var uniqueConstVal = uniConstRng.getValue();
  var NextOpenRow = destSheet.getLastRow() + 1;
  var ActiveRow = e.range.getRow();
  Logger.log(ActiveRow);
  var uniqueVal = s.getRange(ActiveRow,1).getValue();
  var add = s.getRange(ActiveRow,2).getValue();
  var name = s.getRange(ActiveRow,3).getValue();
  var dt = s.getRange(ActiveRow,5).getValue()
  if (uniqueVal == "") {
    s.getRange(ActiveRow,1).setValue(uniqueVal + 1);
    uniConstRng.setValue(uniqueVal + 1);
    var transferVals = s.getRange(ActiveRow,1,1,5).getValues();
      Logger.log(transferVals);
    destSheet.getRange(NextOpenRow,1,1,5).setValues(transferVals);
    destSheet.getRange(NextOpenRow, 6).setValue("Applicant");
  }
  else {
    var destLastRow = destSheet.getLastRow();
    var destDataRng = destSheet.getRange(2,1,destLastRow,5)
    var destValues = destDataRng.getValues();
    var sourceValues = s.getRange(ActiveRow,1,1,5).getValues();
    for( var i = 0; i < destValues.length; ++i){
      if (destValues([i][0])==uniqueVal) {
        for(n=0;n<destValues[0].length;++n){
          ///I"m stuck!!!

        }
      }
    }
  }
}
正如您所看到的,我有第一个数组循环,但我不知道如何执行第二个循环,只在找到唯一值的行上迭代,并且只将源数据写入找到唯一值的行,而不是整个工作表。

我知道了

下面是代码,下面是它的工作原理

编辑某些列中的值时,将触发此代码

1-它查找位于已编辑行中的唯一标识符

2-将该标识符与另一个电子表格中的唯一标识符列进行比较

3-当找到匹配项时,它会将更改写入新的电子表格并退出循环

function TransferToAppData(e) {
  var destFile = SpreadsheetApp.openById('1V3R2RnpA8yXmz_JDZSkBsK9tGR2LjHZp52p5I1CuQvw');
  var destSheet = destFile.getSheetByName("Raw App Data");
  var ss = e.source;
  var s = ss.getActiveSheet();
  var uniqueConstRng = s.getRange("A1");
  var uniqueConstVal = uniqueConstRng.getValue();
  var NextOpenRow = destSheet.getLastRow() + 1;
  var ActiveRow = e.range.getRow();
  var uniqueVal = s.getRange(ActiveRow,1).getValue();
  if (s.getRange(ActiveRow,2).getValue() == "" || s.getRange(ActiveRow,3).getValue()=="" || s.getRange(ActiveRow,4).getValue()=="" || s.getRange(ActiveRow,5).getValue()=="") {
    s.getRange(ActiveRow,13).clearContent();
    Browser.msgBox("Address, Name, Date Entered & Rent are required fields!");
  } else{
    if (uniqueVal == "") {
      s.getRange(ActiveRow,1).setValue(uniqueConstVal + 1);
      uniqueConstRng.setValue(uniqueConstVal + 1);
      var transferVals = s.getSheetValues(ActiveRow,1,1,5);
      destSheet.getRange(NextOpenRow,1,1,5).setValues(transferVals);
      destSheet.getRange(NextOpenRow, 6).setValue("Applicant");
    }
    else {
      var destLastRow = destSheet.getLastRow();
      var destValues = destSheet.getSheetValues(2,1,destLastRow,5);
      var sourceValues = s.getSheetValues(ActiveRow,1,1,5);
      for(var i = 0; i < destValues.length; ++i){
        if (destValues[i][0]===uniqueVal) {
          destSheet.getRange(i+2,1,1,5).setValues(sourceValues);
          break;
          }
        }
      }
     s.sort(1,false);
     destSheet.sort(1,false);
   }
  }

如果您能将此问题简化为一个简洁的问题,精确地解决代码中存在问题的部分,这将是非常有帮助的。