将行从一个电子表格复制到另一个电子表格时如何停止添加额外的行

How to stop an extra row from being added when copying a row from one spreadsheet to another

我有一个脚本可以根据 "y" 放在 AK 列中将一些数据从一个电子表格复制到另一个电子表格。处理数据本身工作得很好。

但是,当它执行时,它会向目标电子表格添加一个额外的行。我已经尝试使用下面的脚本进行多次操作,但无法弄清楚为什么我总是得到额外的一行。很想知道我哪里出错了。

  function myFunction(e) {
  var sourceSheetName = "Jims Calendar with Accounting";
  var destinationSpreadsheetId = '1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So';
  var destinationSheetName = "Unprocessed Acct Data";

  if (e.source.getSheetName() == sourceSheetName && e.range.getColumn() == 37 && e.value.toUpperCase() == "Y") {
  var row = e.range.getRow();
  var sourceValues = e.source.getRange("B" + row + ":AK" + row).getValues()[0];
  var values = [sourceValues.slice(0, 35)];
  values[0].unshift("JT");
  Logger.log(values[0])
  var tss = SpreadsheetApp.openById(destinationSpreadsheetId);
  var ts = tss.getSheetByName(destinationSheetName);
  ts.getRange(ts.getLastRow()+1 , 2 , values.length, values[0].length).setValues(values);
  e.range.setValue("Copied");
}
}

这几乎是相同的代码。它将一行附加到目标 sheet。你想让它追加还是覆盖。除了附加的行之外,它不会添加任何行。

function MyonEdit(e){
  if(e.range.getSheet().getName()=='Sheet19' && e.range.getColumn()==37 && e.value.toUpperCase()=='Y'){
    var row=e.range.getRow();
    var vA=e.range.getSheet().getRange(row,1,1,35).getValues();
    vA[0].splice(0,0,'JT');
    var ss=SpreadsheetApp.openById('SSID');
    var sh=ss.getSheetByName('Sheet2');
    sh.getRange(sh.getLastRow()+1,2,vA.length,vA[0].length).setValues(vA);
    e.range.setValue('Copied')  
  }
}

我没有得到额外的行。

这是执行三次后目标 sheet 的样子。