如何根据条件正确更新单元格?

问题描述 投票:0回答:1

我在尝试使我的脚本工作时遇到麻烦,并且想知道是否有人可以帮助我解决这个问题。

我正在Google表格中处理一个简单的脚本,如果两行的A,B,C,E和F列相同,它将覆盖一行中的D列单元格。示例表的屏幕截图可以看到here。第2行是基于原始保留进行的,其中A-F列由外部程序填充,而G和H列随后由Appsheet填充。如果保留状态更改,则外部程序将创建一个新行,其中A-F列具有更新的D单元格。我的想法是要有一个脚本,该脚本将根据以下条件将D2替换为D3并删除第3行:

  1. ((A:C)2 =(A:C)3
  2. ((E:F)2 =(E:F)3
  3. D2 = / = D3,不区分大小写

我已经尝试将脚本基于重复的删除脚本,但是作为输出,它删除了“已更新”行而不替换原始D单元格。任何帮助将不胜感激!

//overwrite old rows with updated rows
function update() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = new Array();
  for(i in data){
    var row = data[i];
    var update = false;
    for(j in newData){

      if(row.slice(0,2).join() == newData[j].slice(0,2).join() && row.slice(4,5).join() == newData[j].slice(4,5).join() && row.slice(3).join() !== newData[j].slice(3).join() ){
        update = true;
      }
    }
    if(!update){
      newData.push(row);
    }
  }


  // Clear the existing info and update with newData.
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
google-apps-script google-sheets
1个回答
0
投票

假设:

  • 您要比较第2行和第3行中的A,B,C,E,F列。
  • 如果所有这些值都匹配,并且D2D3不匹配,则要将D3的值复制到D2并删除第3行。
  • 您在E和F列中有日期和时间值。

如果所有这些都正确,则可以尝试以下方法:

function update() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var original = data[1];
  var updated = data[2];
  // Checking that values match:
  if (original[0] == updated[0] && original[1] == updated[1] && original[2] == updated[2] && original[4].getTime() == updated[4].getTime() && original[5].getTime() == updated[5].getTime() && original[3].toLowerCase() != updated[3].toLowerCase()) {
    sheet.getRange("D2").setValue(updated[3]);
    sheet.deleteRow(3);
  }
}

[请注意,要比较E和F列中的值,应使用getTime()valueOf()(否则这些条件将返回false

我希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.