根据单元格中的值将一行中的一部分从一个Google电子表格复制到另一个Google电子表格?

时间:2018-08-31 05:02:27

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

我试图根据第11列(K)上是否有“ Y”来编写脚本,以复制特定行的B:K列。

我有脚本可以在同一电子表格中从一张纸移动到另一张纸,效果很好,但是我真的很难将一个电子表格移动到另一张电子表格,并且只移动部分行而不是整个行。

下面是到目前为止的脚本...希望帮助!

function onEdit() {

  var sss = SpreadsheetApp.openById("15RWoaW8tRLVGOTDrZvBLJwx0beWEsV3x8pfwGe2zMfc").getSheetByName("2018 2 Week Snapshot for Jim"); // sss = source spreadsheet
  var r = sss.getActiveRange();
  if(sss.getName() == "2018 2 Week Snapshot for Jim" && r.getColumn() == 11 && r.getValue() == "Y") {
    var row = r.getRow();
    var numColumns = sss.getLastColumn();
    var tss = SpreadsheetApp.openById("1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So"); // tss = target spreadsheet
    var targetSheet = tss.getSheetByName("Test Sheet"); // ts = target sheet
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    tss.getRange(row, 1, 1, numColumns).copyTo(target);
}

}

这是我的新代码,仍然很麻烦:

function onEdit() {

 var sss = SpreadsheetApp.openById('15RWoaW8tRLVGOTDrZvBLJwx0beWEsV3x8pfwGe2zMfc'); // sss = source spreadsheet
  var ss = sss.getSheetByName('2018 2 Week Snapshot for Jim'); // ss = source sheet
  var SRange = ss.getRange("C:K");


if(ss.getName() == "2018 2 Week Snapshot for Jim" && SRange.getColumn() == 9 && SRange.getValue() == "y") {
    var row = SRange.getRow();
    var numColumns = ss.getLastColumn();
    var tss = SpreadsheetApp.openById('1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So'); // tss = target spreadsheet
  var ts = tss.getSheetByName('Test Sheet'); // ts = target sheet
  var target = ts.getRange(ts.getLastRow() + 1, 1);
    ss.getRange(row, 1, 1, numColumns).SetValues(target);


}

}

1 个答案:

答案 0 :(得分:0)

  • 当用户将yY放在活动电子表格的K表的2018 2 Week Snapshot for Jim列中时,您只想复制{{1}的值}到B:K电子表格上“测试表”的最后一行。
    • 1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So的电子表格是活动的电子表格。

如果我的理解是正确的,那么该修改如何?

修改点:

    15RWoaW8tRLVGOTDrZvBLJwx0beWEsV3x8pfwGe2zMfc中的
  • set是小写。
  • setValues()中的
  • values是2维数组。
    • setValues(values)的范围是放置值的范围。
  • 使用setValues(values)时,可以使用事件对象。

上面反映的脚本如下。

修改后的脚本:

onEdit()

注意:

  • 在使用此脚本之前,请安装function myFunction(e) { var sourceSheetName = "2018 2 Week Snapshot for Jim"; var destinationSpreadsheetId = "1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So"; var destinationSheetName = "Test Sheet"; if (e.source.getSheetName() == sourceSheetName && e.range.getA1Notation()[0] == "K" && e.value.toUpperCase() == "Y") { var sourceValues = e.source.getRange("B:K").getValues().filter(function(e){return e.filter(String).length > 0}); var tss = SpreadsheetApp.openById(destinationSpreadsheetId); var ts = tss.getSheetByName(destinationSheetName); ts.getRange(ts.getLastRow() + 1, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues); } } 作为可安装的触发器。

参考文献:

如果我误解了你的情况,对不起。