*语法
我已经设法实现了我需要的功能,但它比我想要的更加手动 - 我必须运行几个不同的函数来实现完整的结果数组,而不是一个能产生完整数组的函数。另外 - 如果我想将它作为通用脚本,我只使用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});
}
答案 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。接下来您可以迭代该地图并调用匿名函数,该函数将接收具有sheet1
和sheet2
属性的对象。
您可以向此地图添加任何参数。例如:B4:AB500
让我们修改我们的地图:
map = [{sheet1: 2, sheet2: 0, range: 'B4:AB500'},{sheet1: 3, sheet2: 0, range: 'B6:AB500'}]
sheet1.getRange(obj.range).copyTo...