У меня 300 000 ячеек, все из которых используют один и тот же базовый оператор IF (при копировании / вставке сверху и снизу обновляется соответствующая ссылка на строку или столбец).Это используется для заполнения диаграммы Ганта, сравнивая значение даты заголовка столбца с другой ячейкой в той же строке.В зависимости от найденных значений, выходные данные представляют собой букву или вообще ничего.
Проблема, как вы можете себе представить, в производительности - она очень-очень медленная.Кажется, что каждый раз, когда я что-то делаю на листе, каждое утверждение IF переоценивается, и результаты очень плохие.
Есть ли способ удалить этот оператор IF в ячейках и добавить его как функцию, вызывая его только через меню, когда я хочу обновить диаграмму Ганта?
Вотоператор IF:
=IF($K2="N/A","",IF(AND(L$1>=$H2,L$1<=$I2),IF(ISBLANK($E2),"A",IF(ISBLANK($F2),"B",IF($G2="Crew","D","C"))),""))
Я пробовал несколько разных способов, но я поставлен в тупик на том, как можно оценить одну введенную формулу в GAS для каждой ячейки с их собственными соответствующими ссылками на столбцы и строки?
// Adds a custom menu
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Refresh Data')
.addItem('Update Gantt', 'setIfForGantt')
.addToUi();
}
// Set IF statement for Gantt chart
function setIfForGantt() {
var sheetName = "Project Management";
var range = "L:CW";
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
var range = sheet.getRange(range);
var values = range.getValues();
var formula = ['IF($K2="N/A","",IF(AND(L$1>=$H2,L$1<=$I2),IF(ISBLANK($E2),"A",IF(ISBLANK($F2),"B",IF($G2="Crew","D","C"))),""))'];