首页 > 解决方案 > 切片列并以唯一顺序粘贴?

问题描述

我有一个按预期执行的脚本,但是当前的切片方法正在粘贴不正确的范围。

目前,该脚本复制第 1-12 列(A:L)并粘贴第 1-5 列(A:E),跳过第 6(F)列,并按原样粘贴第 7-12 列(G:L)。

我想让脚本粘贴第 1-5 列(A:E),跳过第 6(F)列,粘贴第 7(G)列,跳过第 8(H)列,并用第 9 列中的数据粘贴第 9(I)列(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)])      
}

标签: javascriptgoogle-apps-scriptgoogle-sheetscopyslice

解决方案


我理解你想要做什么如下。

  • 来源:从一行中检索 A、B、C、D、E、F、G、H、I、J、K 和 L。
  • 目的地:将 A、B、C、D、E、G 和 (I) 排成一排。
    • 关于“我”,当“K”为“迟到”或“我”为“缺勤”时,加“我”。

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

修改后的脚本:

元素被 检索后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]);
}

参考 :

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


推荐阅读