Созданная мной пользовательская формула не работает из-за проблемы с правами доступа, но после выполнения рекомендаций я все еще не могу понять, в чем проблема.
Я написал пользовательскую формулу «СУММЕСЛИМЕТ», которую опубликовал для других членов группы в том же домене в качестве аддона. По какой-то причине, когда мы пытаемся использовать его (включая меня) в электронной таблице, которая не содержит фактического скрипта (но включена через надстройку), возникает следующая ошибка:
Ошибка У вас нет разрешения на вызов getActiveUser (строка 37).
Следуйте этим рекомендациям по разрешению доступа к пользовательским формулам в таблицах Google: https://developers.google.com/apps-script/guides/sheets/functions#advanced
и конкретно в отношении листов:
Только чтение (можно использовать большинство методов get*(), но не set*()). Не удается открыть другие электронные таблицы (SpreadsheetApp.openById() или SpreadsheetApp.openByUrl()).
Я пытался убедиться, что использую только функции Get, но все равно выдает ошибку. Код:
/**
* For each cell in {searchCol} that contains the cell content, it adds
* the correspond value from the same row in {sumCol}
* {criterion} is optional if want to add a condition the the {sumCol} value also need to fullfill.
* @param {searchCol} input The column to check and iterate over.
* @param {sumCol} input The correspond column from which we add to sum.
* @param {criterion} input An optional field - adding a constraint on {sumCol} values.
* @return The sum of all cells that met the requirements.
* @customfunction
*/
function SUMIFALL(searchCol, sumCol, criterion){
var checkCriteria = criterion != null ? encapsulateCriterion(criterion) : function(val) { return true; };
var arrayOfSum = searchCol.map(function(cell){
var sum = 0;
for(var i=0; i<searchCol.length; i++){
var traffic = Number(sumCol[i]);
var phrase = searchCol[i].toString();
var found = phrase.search(new RegExp("\\b("+cell+")\\b","gi")) != -1;
sum += checkCriteria(traffic) && found ? traffic : 0;
}
return sum;
});
return arrayOfSum;
}
/**
* For each cell in {searchCol} that contains the word {cell} content
* adds the correspond value from the same row in {sumCol}
* {criterion} is optional if want to add a condition the the {sumCol} value also need to fullfill.
* @param {cell} A cell that contains the word to be searched.
* @param {searchCol} input The column to check and iterate over.
* @param {sumCol} input The correspond column from which we add to sum.
* @param {criterion} input An optional field - adding a constraint on {sumCol} values.
* @return The sum of all cells that met the requirements.
* @customfunction
*/
function SUMIFREGEX(cell, searchCol, sumCol, criterion){
var checkCriteria = criterion != null ? encapsulateCriterion(criterion) : function(val) { return true; };
var sum = 0;
for(var i=0; i<searchCol.length; i++){
var traffic = Number(sumCol[i]);
var phrase = searchCol[i].toString();
var found = phrase.search(new RegExp("\\b("+cell+")\\b","gi")) != -1;
sum += checkCriteria(traffic) && found ? traffic : 0;
}
return sum;
}
function encapsulateCriterion(criterion){
var criteriaSplit = criterion.search(/[0-9]/gi);
var criteria = criterion.substring(0,criteriaSplit);
var number = Number(criterion.substring(criteriaSplit));
return function(val){
return criteria == '=' ? val == number :
criteria == '<' ? val < number :
criteria == '>' ? val > number :
criteria == '<=' ? val <= number :
criteria == '>=' ? val >= number :
criteria == '<>' ? val != number : true;
}
}
Они также упоминают на своей странице:
Если ваша пользовательская функция выдает сообщение об ошибке У вас нет разрешения на вызов службы X, служба требует авторизации пользователя и, следовательно, не может использоваться в пользовательской функции.
Кто-нибудь знает, в чем может быть проблема? Единственная манипуляция с содержимым листа связана с предоставленным диапазоном, что очень похоже на пример, который они предоставили на своей странице.
заранее спасибо
getActiveUser()
? - person TheMaster   schedule 25.08.2019