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