Ни при каких обстоятельствах не дразните систему
setValue()
, да еще и во вложенном цикле. Запись происходит не на ваш ПК, а на сервер. Кому понравится, когда его так дергают?
Чтобы работало даже с "черновиками", т.е. до 50 000 строк на лист, сначала берите
ВСЕ данные, потом формируйте
ГОТОВЫЙ массив, потом делайте
setValue()
.
Примерно так:
function writeData(){
//Не факт, что поможет, но вдруг
SpreadsheetApp.flush();
//Далее как у всех
var ss = SpreadsheetApp.getActiveSpreadsheet();
var resultSheet = ss.getSheetByName("Result");
var agentsSheet = ss.getSheetByName("Buyers");
var productsSheet = ss.getSheetByName("Products");
var aV = agentsSheet.getDataRange().getValues();
var pV = productsSheet.getDataRange().getValues();
//срезать шапку
aV.shift();
// pV.shift();
var res = [];
for(var i = 0; i< aV.length; i++)
{
res.push([].concat([aV[i][0]], pV[0]));
for(var j = 1; j < pV.length; j++){
res.push([].concat([''], pV[j]));
}
}
res = res.slice(0, 50000);
resultSheet.getDataRange().clear();
resultSheet.getRange(1, 1, res.length, res[0].length).setValues(res);
}