此代码可用于更新“更新”日期的值以及与“ keyid”列值匹配的另一张纸上的列中的状态。按计划运行,测试数据检查最近5天内的日期。对于该日期范围内的那些项目,请使用新的更新日期和新状态更新目标表中的那些项目。
已添加注意:updateExistingRows()函数只是从定时触发器运行的主函数调用的一个步骤。主要功能有一个步骤,该步骤可在SQL服务器上运行存储的proc,以在每次流程运行时刷新主工作表(清除并重新填充工作表)。
这花了我一些时间,我很好奇是否有更好的做法使用app脚本来检查工作表之间的更改并进行更新。工作表没有相同的数据列。我发现大多数示例都在哪里添加行而不更新行中的特定元素。
注意:如果我没有在这些行中添加“ +1”:
targetTab.getRange(n+1,8)
它在我的目标表上面的行上写了值。这是我的代码:
function updateExistingRows() {
var date = new Date();
var sss = SpreadsheetApp.openById('xxxxxxxx');
var sourceTab = sss.getSheetByName('Sheet1');
var srcrg = sourceTab.getDataRange();
var srcvA = srcrg.getValues();
var tss = SpreadsheetApp.openById('yyyyyyyy');
var targetTab = tss.getSheetByName('Sheet3');
var tarrg = targetTab.getDataRange();
var tarvA = tarrg.getValues();
var source_data = sourceTab.getDataRange().getValues();
var target_data = targetTab.getDataRange().getValues();
for (var n = 1 ; n < source_data.length ; n++) {
if (source_data[n][11] >= new Date(date.getTime()-5*(24*3600*1000)) ) {
if (source_data[n][8] = target_data[n][5]) {
var new_updated = source_data[n][11];
var new_status = source_data[n][13];
targetTab.getRange(n+1,8).setValue(new_updated);
targetTab.getRange(n+1,10).setValue(new_status);
}
}
}
}