У меня есть код, который проходит через мои строки и в зависимости от того, что это значение в столбце 2, возвращает различные типы формул IndexMatch. Мой код работает очень хорошо и помещает формулы в соответствующие столбцы, однако он очень медленный.
Я получаю сообщение о том, что.getValue() очень тяжелый и, следовательно, замедляет код.
Теперь мне нужно выяснить, как улучшить скорость кода, но поскольку я новичок в кодировании, я не особо уверен, как это сделать.
Вот что я имею:
function setFormulas() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); //gets the workbook being used
var sheet = ss.getSheetByName("Open Requests"); //gets the active worksheet
var sheetnametoWatch ="Open Requests"; //defines sheet
var columnnumbertoWatch = 14
var valuetoWatch = ""
var CostCenter = "'Open Requests'!"
var lastrow = sheet.getLastRow();
var datarange = sheet.getRange(11,2,lastrow -1,50).getValues()
var row = 10
for (i=0;i<datarange.length;i++){
var rowID = 10 + i + 1
if (datarange[i][0] == "CC"){
var addedCell = '=CONCATENATE(F'+rowID+',N'+rowID+',K'+rowID+')';
sheet.getRange(row + i+1,35).setFormula(addedCell);
var MatchedCell = '=INDEX(Input!$Q:$Q,MATCH('+CostCenter+'$AI$'+rowID+',Input!$K:$K,0))';
sheet.getRange(row + i+1,17).setFormula(MatchedCell);
sheet.getRange(row + i+1,18).setValue("[email protected]")
}
else if (datarange[i][0] == "CC + TM1"){
var addedCell = '=CONCATENATE(F'+rowID+',N'+rowID+',K'+rowID+')';
sheet.getRange(row + i+1,35).setFormula(addedCell);
var MatchedCell = '=INDEX(Input!$Q:$Q,MATCH('+CostCenter+'$AI$'+rowID+',Input!$K:$K,0))';
sheet.getRange(row + i+1,17).setFormula(MatchedCell);
sheet.getRange(row + i+1,18).setValue("[email protected]")
}
else if (datarange[i][0] == "GC"){
sheet.getRange(row + i+1,18).setValue("[email protected]")
}
}
}
Итак, как вы можете видеть, я просматриваю данные, а затем в зависимости от того, будет ли столбец = CC, CC + TM1, GC, установить другие ячейки, равные соответствующей формуле.
Было бы здорово, если бы кто-то помог мне ускорить этот процесс.
У меня возникают проблемы с тем, что делает код, но на высоком уровне, я думаю, что вы хотите сделать это: вместо того, чтобы устанавливать формулы для определенных ячеек при циклическом переходе через цикл for, используйте цикл, чтобы выяснить какие ячейки должны быть установлены на какие формулы и хранить эту информацию. Затем, в конце цикла for, вызовите sheet.getRange(x,y).setFormula(Formula);
всего несколько раз, возможно, один раз для каждой формулы.
Кажется, это может сработать?