我正在使用Google表格处理一个项目,并且需要使用Google Apps脚本创建一个脚本。
我需要重写工作表中包含特定数字的每一行。 我现在有以下代码:
function AddDuplicate() {
var app = SpreadsheetApp;
var ActiveSheet = app.getActiveSpreadsheet().getActiveSheet();
//var data = sheet.getDataRange().getRow();
var Zdroj = app.getActiveSpreadsheet().getSheetByName("ZDROJ");
var Vysledek = app.getActiveSpreadsheet().getSheetByName("VYSLEDKY");
var PocetRadkuVysledku = 1;
for(var i= AktualniPoziceY ;i<500;i++)
{
var pocet = Zdroj.getRange(i,7).getValue();
for(var y = 1; y<pocet+1;y++)
{
for(var o = AktualniPoziceX ; o < 10; o++)
{
var Pom = Zdroj.getRange(i,o).getValue();
Vysledek.getRange(PocetRadkuVysledku, o).setValue(Pom);
}
PocetRadkuVysledku++;
}
}
}
它可以工作,但是我唯一遇到的问题是“超出了Google Apps脚本的最大执行时间”错误,这将在某些时候停止我的脚本。有人可以帮忙,如何克服这个问题?
答案 0 :(得分:0)
如何将其应用于您的案例:
使用数组并在完成迭代后仅进行一次调用,而不是在嵌套的for循环的每次迭代中检索范围和设置值(由于多次调用SpreadsheetApp服务,效率低下)。
使用getValues()
和setValues()
代替getValue()
和setValue()
。
示例(您需要根据自己的需要调整range维度,重要的是目标范围的行和列数与原始范围相同)
function AddDuplicate() {
var app = SpreadsheetApp;
var ss = app.getActive();
var Zdroj = ss.getSheetByName("ZDROJ");
var Vysledek = ss.getSheetByName("VYSLEDKY");
var pocetArray = Zdroj.getRange(1,7, 500, 1).getValues();
Vysledek.getRange(1, AktualniPoziceX, pocet, 500, 1).setValues(pocetArray);
}