异常:无法从此上下文调用 SpreadsheetApp.getUi()。 (第 1 行)

Exception: Cannot call SpreadsheetApp.getUi() from this context. (line 1)

我有一个包含两个脚本的项目,该项目绑定到 Google 电子表格。 第一个脚本打开 UI

    var ui = SpreadsheetApp.getUi();
var userProperties = PropertiesService.getUserProperties();

const TOKEN_OLD = 'api.token_old';

function onOpen(){

  ui.createMenu('CREDENZIALI')
  .addItem('Imposta TOKEN', 'setToken')
  .addToUi();
}

function setToken(){
  var scriptValue = ui.prompt('Per favore inserisci il token.' , ui.ButtonSet.OK);
  userProperties.setProperty(TOKEN_OLD, scriptValue.getResponseText());
}

第二个执行业务逻辑并实现一个用于电子表格的自定义函数。

function getFromApi(book_id,dato) {...}

显然,这个 API 在身份验证之后,我不想将令牌硬编码到脚本中,所以我创建了第一个 UI 以便最终用户在运行时管理它。

UI 工作完美,但是当我尝试调用自定义函数时,出现此错误:

我是文件的所有者。我错过了什么?

尝试在onOpen()setToken()中分别添加SpreadsheetApp.getUi();

以下脚本独立运行:

var userProperties = PropertiesService.getUserProperties();

const TOKEN_OLD = 'api.token_old';

function onOpen(){
  
  SpreadsheetApp.getUi()
  .createMenu('CREDENZIALI')
  .addItem('Imposta TOKEN', 'setToken')
  .addToUi();
}

function setToken(){
  var ui = SpreadsheetApp.getUi();
  var scriptValue = ui.prompt('Per favore inserisci il token.' , ui.ButtonSet.OK);
  userProperties.setProperty(TOKEN_OLD, scriptValue.getResponseText());
}

但是,您不能使用自定义公式来调用此函数。见相关文章: