Прежде всего, ваша функция нуждается в некоторой очистке (это можно сделать и дальше, но это только начало):
function fillAccount(lastRow) {
var spreadsheet = getSpread(); //custom method calling the Spreadsheet, change to your logic;
var colB = spreadsheet.getRange('B1:B'+lastRow);
var row1 = colB.getCell(1,1);
var row2 = colB.getCell(2,1);
row1.setValue(' ');
row2.setFormula('=ifna(vlookup(C2,RENAMED!$A$1:$A$7,1,false),B1)');
row2.copyTo(colB.offset(1,0,lastRow-1), SpreadsheetApp.CopyPasteType.PASTE_FORMULA, false);
SpreadsheetApp.flush(); //make sure changes are applied;
}
Затем просто вызовите вторую функцию и убедитесь, что у вас есть доступ к значениям.чтобы обеспечить вычисление (если у вас довольно большая задержка (например,> 1 для каждой формулы вычислений), некоторые формулы могут заканчиваться значением #ERROR!
- если вы хотите учесть это, добавьте проверку ==='#ERROR!'
, которая завершает вторую функцию послевстречая такое значение и рекурсивно перезапускает его):
/**
* Caller function;
*/
function triggerFill() {
//...your logic and lastRow initialization here;
fillAccount(lastRow);
copyAllData();
}
/**
* Function accessing updated values;
*/
function copyAllData() {
var spreadsheet = getSpread(); //custom method calling the Spreadsheet, change to your logic;
var dataRange = spreadsheet.getDataRange(); //just an example that gets all data;
var values = dataRange.getValues(); //just an example that gets all values;
for(var i=0; i<values.length; i++) {
if(values[i].indexOf('#ERROR!')!==-1) { //for high latency;
Utilities.sleep(t) //change t to number of ms to wait to your liking;
return copyAllData();
}
}
//do other stuff, like cell copy;
}