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

时间:2014-09-29 17:05:30

标签: javascript arrays google-apps-script

大家好,我在项目中实现数组循环时遇到了麻烦...这就是我想要做的。

我有一个名为“红皮书”的电子表格,一旦工作人员更新了这张表,我就会定期更新我有一个列,他们可以选择提交他们刚刚在该特定行输入的数据(编辑此列称为onEdit函数)。

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

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

  1. 遍历A列以查找唯一标识符
  2. 找到后更新第1列到第5列中的数据
  3. 以下是我到目前为止的脚本:

    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 个答案:

答案 0 :(得分:0)

我明白了......

以下是代码,以下是它的工作原理......

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

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);
   }
  }