Вот пользовательская функция, которая может заменить формулу, которую вы используете. Например:
=listStudents(C50,B50,F50)
Если используется таким образом, вы все еще будете иметь постоянный перерасчет, но она должна быть намного быстрее, чем тесты регулярных выражений. Альтернативно, одна и та же функция может быть вызвана из пункта меню и использована для заполнения заданного целевого диапазона на листе, что позволяет избежать автоматического пересчета.
Код:
/**
* Custom spreadsheet function to produce a list of names of
* students that match the given criteria.
*/
function listStudents(givenName, surname, employer) {
var matches = []; // matching students will be placed in this array
var HEADERS = 1; // # rows of header info at top of sheet
var FULLNAME = 1; // Column containing full names (B)
var EMPLOYER = 2; // employers (C)
// Array filter function - returns true if conditions match
function test4match(row) {
return (row[FULLNAME].indexOf(givenName) !== -1 &&
row[FULLNAME].indexOf(surname) !== -1 &&
row[EMPLOYER].indexOf(employer) !== -1)
}
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Students');
var range = sheet.getDataRange();
var data = range.getValues().slice(HEADERS); // All data from sheet, without headers
var filteredData = data.filter(test4match); // Get matching rows
for (var i=0; i<filteredData.length; i++) {
matches.push(filteredData[i][FULLNAME]); // Then produce list of names
}
return [matches]; // Return a 2-d array, one row
}
Это не приложение сценария. Формулы его электронных таблиц. Поместите правильные метки. –
Я пытаюсь понять, как преобразовать форму электронной таблицы в пользовательский скрипт google. – user41592
Предоставьте больше объяснений тому, что он делает. Сценарий будет медленнее, чем формула, если вы его кодируете с использованием того же алгоритма. Возможно, вам придется менять стратегии. –