如何减少我的脚本中的数组的功能?

时间:2016-05-04 10:07:20

标签: javascript arrays google-sheets

*语法

我已经设法实现了我需要的功能,但它比我想要的更加手动 - 我必须运行几个不同的函数来实现完整的结果数组,而不是一个能产生完整数组的函数。另外 - 如果我想将它作为通用脚本,我只使用getID(“ENTER ID”)而不是getActive()吗?

任何人都可以帮助我修改下面的脚本(它会持续大约20张)吗?

function CopyDispatchWithHeaders (){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var source = ss.getSheets()[1];
    var range = source.getRange("B3:AB400");

    range.copyValuesToRange(0, 1, 27, 1, 500);
}

function CopyDispatchReport1() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet1 = ss.getSheets()[2];
    var sheet2 = ss.getSheets()[0];

    sheet1.getRange("B4:AB500").copyTo(sheet2.getRange(sheet2.getLastRow()+1,1,500,27), {contentsOnly:true});

}

function CopyDispatchReport2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheets()[3];
  var sheet2 = ss.getSheets()[0];

  sheet1.getRange("B4:AB500").copyTo(sheet2.getRange(sheet2.getLastRow()+1,1,500,27), {contentsOnly:true});
 }

1 个答案:

答案 0 :(得分:1)

您可以用以下内容替换所有CopyDispatchReport1()CopyDispatchReport2()等功能:

var 
  map = [{sheet1: 2, sheet2: 0},{sheet1: 3, sheet2: 0}],
  i,
  runner;

for (i in map) {

  (function(obj) {

    var
      ss,
      sheet1,
      sheet2;

    ss = SpreadsheetApp.getActiveSpreadsheet();
    sheet1 = ss.getSheets()[obj.sheet1];
    sheet2 = ss.getSheets()[obj.sheet1];

    sheet1.getRange("B4:AB500").copyTo(sheet2.getRange(sheet2.getLastRow()+1,1,500,27), {contentsOnly:true});

  })(map[i]);
}

首先,你需要创建一个地图(在我们的例子中是一个对象数组),它将为你的工作表存储必要的ID。接下来您可以迭代该地图并调用匿名函数,该函数将接收具有sheet1sheet2属性的对象。

您可以向此地图添加任何参数。例如:B4:AB500

让我们修改我们的地图:

map = [{sheet1: 2, sheet2: 0, range: 'B4:AB500'},{sheet1: 3, sheet2: 0, range: 'B6:AB500'}]

sheet1.getRange(obj.range).copyTo...