用于将特定列从一个工作表复制到另一个工作表但不按相同顺序复制的脚本

时间:2017-12-06 06:17:37

标签: javascript google-apps-script

我已经有了这个脚本,但我只是想知道是否有人可以解释如何提高效率。现在我只是重复代码,这显然不是正确的方法。

基本上我只是想将某些列从一张纸复制到另一张。问题是我不想要源表中的所有列,并且它们在目标表上也不是相同的顺序。例如:源表上的列A位于目标表单上的列D中

function copy() {
    var sss = SpreadsheetApp.openById('myID');
    var ss = sss.getSheetByName('Inventory'); 
    var range1 = ss.getRange('A2:A');
    var data1 = range1.getValues();
    var range2 = ss.getRange('D2:D');
    var data2 = range2.getValues();
    var range3 = ss.getRange('F2:F');
    var data3 = range3.getValues();
    var tss = SpreadsheetApp.openById('myID');
    var ts = tss.getSheetByName('Inventory Report'); 
    ts.getRange(2, 4, data1.length, data1[0].length).setValues(data1);
    ts.getRange(2, 2, data2.length, data2[0].length).setValues(data2);
    ts.getRange(2, 1, data3.length, data3[0].length).setValues(data3);
}

1 个答案:

答案 0 :(得分:0)

这次修改怎么样?请将此视为几个答案之一。

修改要点:

  • 使用getDataRange()从源表中检索所有数据。
  • 创建用于导入目标工作表的数据。
    • 在这里,我使用了filter()map()
    • e[5]e[3]e[0]]分别对应F2:FD2:DA2:A
    • [e[5], e[3], "", e[0]]分别对应getRange(2, 1,getRange(2, 2,getRange(2, 4,。没有getRange(2, 3,。所以我使用了""
  • 将数据导入目标表。

修改后的脚本:

function copy() {
  var sss = SpreadsheetApp.openById('myID');
  var ss = sss.getSheetByName('Inventory'); 
  var data = ss.getDataRange().getValues();
  var d = data.filter(function(e, i){return i > 0 && e}).map(function(e){return [e[5], e[3], "", e[0]]});
  var tss = SpreadsheetApp.openById('myID');
  var ts = tss.getSheetByName('Inventory Report');
  ts.getRange(2, 1, d.length, d[0].length).setValues(d);
}

Rererences:

如果我的理解错了,我很抱歉。