我正在尝试为工作场所中的重复任务设计一些时间表。为了进行设置,我遍历数据以在第2列中找到“季度”值,在第3列中找到“重复发生”值。
如果确实找到这些值,则将行数据推入数组。然后,我根据数组中的第4个值(称为timesrecurring),对数组进行多次连接(为此,我使用了下面代码中未显示的其他函数)。
最后,我使用.setvalues()将数组复制到另一张纸上。代码如下:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Input Table");
var targetsheet = ss.getSheetByName("Summary Calendar");
var lastrow = sheet.getLastRow();
var datarange = sheet.getRange(8, 2, lastrow-1 , 10).getValues();
var x = [];
for(i=0; i<datarange.length; i++){
if (datarange[i][1] == "Recurring" && datarange[i][2] == "Quarterly" ){
x.push([datarange[i][0],datarange[i][1],datarange[i][2],datarange[i]
[3],datarange[i][4],datarange[i][7],datarange[i][8],datarange[i]
[9],datarange[i][5],datarange[i][6])
var timesrecurring = datarange[i][3]
var y = replicateArray(x,timesrecurring)
targetsheet.getRange(targetsheet.getLastRow()+1, 2,
y.length,y[0].length).setValues(y);
}
}
}
正如您在这里看到的那样,我正在查找具有“季度”和“重复发生”的行,并将相关行推入数组。然后,根据timesrecurring的值连接数组。
如果在我应用for循环的原始数据范围中只有一行“季度”和“重复发生”的脚本运行良好。但是,一旦添加第二行,就会发生以下情况:
第一栏FTE报告应该有6行,而Ad-hoc应该有3行。但是,该脚本首先从原始数据中复制FTE报告6次,然后花费FTE报告和Ad-hoc 3次(尽管仅假设是3x)。似乎是第二次在阵列中存储了FTE报告行和Ad-hoc行,而不仅仅是Ad-hoc行。
我尝试了一些方法来解决此问题,并在网上查看,但找不到任何有效的方法。任何帮助,将不胜感激。
答案 0 :(得分:0)
每发出一次x
电话,您就会x.push
。因此,如果x在调用要复制时有四个不同的行,那么结果将是8。
可能您只想多次将特定的datarange
行添加到x
。您可以使用push.apply
语法来避免键入datarange[i]
的内部元素:
const x = [];
datarange.forEach(function (row, i) {
if (row[1] === "Recurring" && row[2] === "Quarterly") {
var timesRepl = row[3];
for(var n = 0; n < timesRepl; ++n) {
Array.prototype.push.apply(x, row);
}
... // Do other stuff with a quarterly recurring row
}
...// Do other stuff with any row
});
...