0

我正在尝试使用来自 Romain Vialard 和 James Ferreira 的书(已修改)的 Google Apps 脚本建议框库在我的 Google 电子表格中添加自动完成功能(电子表格中的弹出窗口中的 Ui):

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "my_sheet" ) { //checks that we're on the correct sheet
    var r = s.getActiveCell();
    if( r.getColumn() == 1) {

        var names = ["Adam", "Peter", "Benjamin", "Ceaser", "Prometheus", "Gandi", "Gotama", "Mickey Mouse"];
        var app = UiApp.createApplication();
        var suggestBox = SuggestBoxCreator.createSuggestBox(app, 'contactPicker', 200, names);
        app.add(suggestBox);
        SpreadsheetApp.getActive().show(app);
        var dataCell0 = r.offset(0, 1);

      var dataCell0 = r.offset(0, 1); 
      if( dataCell0.getValue() == '' )
        otherTestTunction();
   }
  }
}

但是,当我开始编辑“my_sheet”的第 1 列并出现 Ui 框时,会发生此自动化错误(用我的语言它说:“您必须有权执行此操作”):

在此处输入图像描述

文档说 onEdit() 触发器“他们无法访问任何需要以该用户身份进行身份验证的服务。例如,谷歌翻译服务是匿名的,可以通过简单的触发器访问。谷歌日历、Gmail 和站点不是匿名的,并且简单的触发器无法访问这些服务。”

由于我没有使用ContactsApp,我认为建议框库需要授权。

我怎样才能在需要授权的编辑触发器上设置一个可安装的?(你能给我一些代码示例吗?)

这是我的测试电子表格:https ://docs.google.com/spreadsheet/ccc?key=0AtHEC6UUJ_rsdFBWMkhfWUQ0MEs2ck5OY1BsYjRSLXc&usp=drive_web#gid=0

4

1 回答 1

2

出于对您对图书馆所需授权的建议的好奇,我在一张新工作表上进行了测试,下面的确切代码要求访问电子表格,仅此而已。

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
        var names = ["Adam", "Peter", "Benjamin", "Ceaser", "Prometheus", "Gandi", "Gotama", "Mickey Mouse"];
        var app = UiApp.createApplication();
        var suggestBox = SuggestBoxCreator.createSuggestBox(app, 'contactPicker', 200, names);
        app.add(suggestBox);
        SpreadsheetApp.getActive().show(app);
        var dataCell0 = r.offset(0, 1);
}

要处理这个问题,你只需要让你的用户在你的脚本中运行一个函数(不管是什么函数),他们就会得到以下弹出窗口:

在此处输入图像描述

在此初始步骤之后,您的功能将按预期工作,即 Ui 将出现。

除此之外,我不确定我是否理解您想要实现的目标是否可行,onEdit 触发器会在编辑完成时触发,这意味着在您按 ENTER 后,建议框中的值不会被考虑在内......而且你必须在 UI 中处理任何事情,所以我仍然想知道你真的希望用这段代码做什么?(理想的是电子表格应用程序中的 onClick 事件,但不幸的是它目前不存在......)

但也许我错过了一些明显的东西。

关于您在帖子中提到的可安装 onEdit,您应该注意它不需要最终用户授权,因为它会以您的身份运行,即创建触发器的人而不是访问 SS 的用户,因此可以访问您自己的数据,而不是用户的数据......这可能是一个不可忽视的限制(正如 Zig 在前面的评论中提到的......)

于 2013-11-09T19:34:59.467 回答