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

时间:2018-12-10 19:24:52

标签: google-apps-script google-sheets google-sheets-api

我有一个脚本,可以根据放置在AK列中的“ y”将一些数据从一个电子表格复制到另一个电子表格。处理数据本身就很好。

但是,在执行此操作时,会在目标电子表格中添加额外的一行。我用下面的脚本尝试了多种操作,但无法弄清楚为什么我不断得到额外的一行。很想了解我要去哪里。

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

Blank row every time

1 个答案:

答案 0 :(得分:1)

这几乎是相同的代码。它将一行附加到目标表。是否要附加或覆盖它。除了添加的行,它不会添加任何行。

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

我没有多余的一行。

这是执行三遍后目标表的样子。

enter image description here