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

Compare value to another spreadsheet using array loop and write new values

本文关键字:比较 然后 新值 电子表格 循环 数组 另一个      更新时间:2023-09-26

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

我有一个名为"红皮书"的电子表格,一旦员工更新了它,这个表格就会定期更新。我有一列,他们可以在其中选择提交他们刚刚在特定行中输入的数据(编辑这个列会调用onEdit函数)。

然后,数据将被写入另一个名为"原始数据"的电子表格(不同的文件)

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

  1. 遍历列A以查找唯一标识符
  2. 一旦找到,更新第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);
   }
  }
相关文章: