簡體   English   中英

插件中的公式權限錯誤 - getActiveUser

[英]Formula's permission error inside an Addon - getActiveUser

由於權限問題,我創建的自定義公式不起作用,但在遵循指南后,我仍然無法理解問題是什么。

我寫了一個自定義公式“SUMIFALL”,我將它發布給與插件相同域上的其他組成員。 出於某種原因,當我們嘗試在不包含實際腳本(但通過插件包含)的電子表格中使用它(包括我在內)時,它會生成以下錯誤:

錯誤 您無權調用 getActiveUser(第 37 行)。

遵循有關谷歌表格中自定義公式的訪問權限的這些准則: 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;
  }
}

他們還在他們的頁面上提到:

如果您的自定義函數拋出錯誤信息 You don't have permission to call X service.,則該服務需要用戶授權,因此無法在自定義函數中使用。

有誰知道可能是什么問題? 對 Sheet 內容的唯一操作是在提供的范圍內,這與他們在頁面上提供的示例非常相似。

提前致謝

顯然(正如我在@TheMaster 的幫助下發現的那樣),即使特定公式不包含不允許的操作,項目文件中的全局變量也會影響公式權限。 在同一個插件中的不同腳本文件中,我在第 37 行調用了“getActiveUser()”方法。

刪除它解決了問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM