切片工作表列并按唯一顺序粘贴?

时间:2018-08-06 18:21:51

标签: javascript google-apps-script google-sheets copy slice

我有一个可以按预期执行的脚本,但是当前的切片方法粘贴了错误的范围。

当前,脚本将按原样复制1-12(A:L)列并粘贴1-5(A:E)列,跳过6(F),并粘贴7-12(G:L)列。 / p>

我希望脚本将数据粘贴到第1-5(A:E)列,跳过6(F),粘贴第7(G)列,跳过第8(H)列和第9(I)列如果“缺席”,则来自第9(I)列;如果“迟到”,则来自第11列。

function Copy() {
    var sss = SpreadsheetApp.openById("sheet id");
    var ss = sss.getSheetByName("Sheet 1"); 
    var lastrow = ss.getLastRow();
    var data = ss.getRange(lastrow, 1, 1, 12).getValues();
    var tss = SpreadsheetApp.openById("sheet id"); 
    var ts = tss.getSheetByName("Sheet 2"); tab name    
    var tslastrow = ts.getLastRow();    
    ts.getRange(tslastrow + 1, 1, 1, 5).setValues([data[0].slice(0,5)]); 
    ts.getRange(tslastrow + 1, 7, 1, 6).setValues([data[0].slice(6)])      
}

1 个答案:

答案 0 :(得分:0)

我了解您要执行的操作。

  • 来源:连续检索A,B,C,D,E,F,G,H,I,J,K和L。
  • 目的地:将A,B,C,D,E,G和(I)放在一行中。
    • 关于“ I”,当“ K”为“迟到”或“ I”为“缺席”时,添加“ I”。

如果我的理解是正确的,那么该修改如何?我认为您的情况有几个答案。因此,请将此视为其中之一。

修改后的脚本:

slice()检索元素之后,使用concat()连接元素。这时,它使用“ I”列的条件。

function Copy() {
  var sss = SpreadsheetApp.openById("sheet id");
  var ss = sss.getSheetByName("Sheet 1");
  var lastrow = ss.getLastRow();
  var data = ss.getRange(lastrow, 1, 1, 12).getValues();
  var tss = SpreadsheetApp.openById("sheet id");
  var ts = tss.getSheetByName("Sheet 2");
  var tslastrow = ts.getLastRow();

  // Below script was modified.
  var r = data[0].slice(0,5).concat(data[0].slice(6,7));
  if (data[0][8] == "Absence" || data[0][10] == "late Arrival") {
    r = r.concat(data[0][8]);
  }
  ts.getRange(tslastrow + 1, 1, 1, r.length).setValues([r]);
}

参考文献:

如果我误解了您想要什么,请告诉我。我想修改它。