【问题标题】:Google Spreadsheet How to allow shared users to execute script谷歌电子表格如何允许共享用户执行脚本
【发布时间】:2014-03-20 15:00:51
【问题描述】:

我的 Google 电子表格有问题。当我在电子表格中执行脚本时脚本运行良好,但是当我与域内的人共享工作表时,完整的脚本不会执行。

该脚本假设在 N 列中的值发生更改时运行,然后提示“您要发送此电子邮件吗”。如果是,则发送电子邮件。

现在,当我与其他同事共享具有编辑权限的电子表格时。他们可以打开电子表格、更改值并接收脚本提示“您要发送此电子邮件吗”。他们点击是,但没有任何反应。不发送电子邮件。发送电子邮件时,他们应该会在电子表格的右下角收到祝酒提示。这也不会弹出。

共享电子表格时如何让其他人能够执行脚本?它可能是代码中的东西吗?任何想法、帮助或代码更正将不胜感激。

这是用于测试的电子表格:https://docs.google.com/spreadsheet/ccc?key=0Ag8NytPhOo00dEt6OUFNSlRUUFEwWmVuNm5RbVZPNHc&usp=sharing

编辑 2

您好 Serge,我看到了您对脚本所做的修改。但是我的同事仍然存在这个问题。我们进入并授权电子表格中的脚本。设置触发器并保存。

当他们更改 N 列中的值时。出现确认框,单击是,没有任何反应。我可以使用公司域之外的所有其他 gmail 帐户来完成脚本。会不会跟公司的域名或者管理员在域名上设置的限制或者执行共享脚本有什么关系?

user@rrd.com 执行脚本和日志输出

日志输出

[14-03-21 02:08:00:906 EDT] sendEmailNotifications2()
[14-03-21 02:08:01:572 EDT] getName:活动光盘
[14-03-21 02:08:01:573 EDT] columnStart: 14
[14-03-21 02:08:01:573 EDT] e.value:进行中
[14-03-21 02:08:01:573 EDT] 进行中

见下文执行记录

[14-03-20 23:30:19:494 EDT] SpreadsheetApp.getActiveRange() [0 秒]
[14-03-20 23:30:19:495 EDT] Range.getRow() [0 秒]
[14-03-20 23:30:19:495 EDT] Range.getLastRow() [0 秒]
[14-03-20 23:30:19:495 EDT] Range.getColumn() [0 秒]
[14-03-20 23:30:19:495 EDT] Range.getLastColumn() [0 秒]
[14-03-20 23:30:19:502 EDT] Session.getActiveUser() [0.006 秒]
[14-03-20 23:30:19:502 EDT] User.getEmail() [0 秒]
[14-03-20 23:30:19:502 EDT] SpreadsheetApp.getActiveSpreadsheet() [0 秒]
[14-03-20 23:30:19:649 EDT] 开始执行
[14-03-20 23:30:19:661 EDT] Session.getEffectiveUser() [0 秒]
[14-03-20 23:30:19:662 EDT] Logger.log([sendEmailNotifications2(), []]) [0 秒]
[14-03-20 23:30:19:662 EDT] Spreadsheet.getActiveSheet() [0 秒]
[14-03-20 23:30:19:674 EDT] SpreadsheetApp.getActiveSpreadsheet() [0 秒]
[14-03-20 23:30:19:945 EDT] Sheet.getName() [0.271 秒]
[14-03-20 23:30:20:340 EDT] Sheet.getName() [0.394 秒]
[14-03-20 23:30:20:340 EDT] Logger.log([getName: Active Discs, []]) [0 seconds]
[14-03-20 23:30:20:340 EDT] Logger.log([columnStart: 14, []]) [0 seconds]
[14-03-20 23:30:20:341 EDT] Logger.log([e.value: In Progress, []]) [0 seconds]
[14-03-20 23:30:20:341 EDT] Logger.log([In Progress, []]) [0 seconds]
[14-03-20 23:30:20:346 EDT] Browser.msgBox([Colombo Team Email, Email will be sent to the Venue Colombo Team. Do you want to send this email?, YES_NO]) [0 seconds]
[14-03-20 23:30:20:451 EDT] Browser.hashCode() [0 秒]
[14-03-20 23:30:20:530 EDT] CacheService.hashCode() [0 秒]
[14-03-20 23:30:20:531 EDT] CalendarApp.hashCode() [0 秒]
[14-03-20 23:30:20:532 EDT] Charts.hashCode() [0 秒]
[14-03-20 23:30:20:534 EDT] ContactsApp.hashCode() [0 秒]
[14-03-20 23:30:20:535 EDT] ContentService.hashCode() [0 秒]
[14-03-20 23:30:20:536 EDT] DocsList.hashCode() [0 秒]
[14-03-20 23:30:20:537 EDT] DocumentApp.hashCode() [0 秒]
[14-03-20 23:30:20:540 EDT] DriveApp.hashCode() [0 秒]
[14-03-20 23:30:20:541 EDT] FinanceApp.hashCode() [0 秒]
[14-03-20 23:30:20:542 EDT] FormApp.hashCode() [0 秒]
[14-03-20 23:30:20:544 EDT] GmailApp.hashCode() [0 秒]
[14-03-20 23:30:20:545 EDT] GroupsApp.hashCode() [0 秒]
[14-03-20 23:30:20:547 EDT] GroupsManager.hashCode() [0 秒]
[14-03-20 23:30:20:548 EDT] HtmlService.hashCode() [0 秒]
[14-03-20 23:30:20:549 EDT] Jdbc.hashCode() [0 秒]
[14-03-20 23:30:20:551 EDT] LanguageApp.hashCode() [0 秒]
[14-03-20 23:30:20:551 EDT] LinearOptimizationService.hashCode() [0 秒]
[14-03-20 23:30:20:552 EDT] LockService.hashCode() [0 秒]
[14-03-20 23:30:20:553 EDT] Logger.hashCode() [0 秒]
[14-03-20 23:30:20:559 EDT] MailApp.hashCode() [0 秒]
[14-03-20 23:30:20:560 EDT] Maps.hashCode() [0 秒]
[14-03-20 23:30:20:561 EDT] NicknameManager.hashCode() [0 秒]
[14-03-20 23:30:20:561 EDT] PropertiesService.hashCode() [0 秒]
[14-03-20 23:30:20:562 EDT] ScriptApp.hashCode() [0 秒]
[14-03-20 23:30:20:564 EDT] ScriptDb.hashCode() [0 秒]
[14-03-20 23:30:20:565 EDT] ScriptProperties.hashCode() [0 秒]
[14-03-20 23:30:20:565 EDT] Session.hashCode() [0 秒]
[14-03-20 23:30:20:566 EDT] SitesApp.hashCode() [0 秒]
[14-03-20 23:30:20:567 EDT] SoapService.hashCode() [0 秒]
[14-03-20 23:30:20:568 EDT] SpreadsheetApp.hashCode() [0 秒]
[14-03-20 23:30:20:570 EDT] UiApp.hashCode() [0 秒]
[14-03-20 23:30:20:573 EDT] UrlFetchApp.hashCode() [0 秒]
[14-03-20 23:30:20:574 EDT] UserManager.hashCode() [0 秒]
[14-03-20 23:30:20:574 EDT] UserProperties.hashCode() [0 秒]
[14-03-20 23:30:20:575 EDT] Utilities.hashCode() [0 秒]
[14-03-20 23:30:20:576 EDT] Xml.hashCode() [0 秒]
[14-03-20 23:30:20:576 EDT] XmlService.hashCode() [0 秒]
[14-03-20 23:30:20:579 EDT] User.hashCode() [0 秒]
[14-03-20 23:30:20:580 EDT] Spreadsheet.hashCode() [0 秒]
[14-03-20 23:30:20:580 EDT] Range.hashCode() [0 秒]
[14-03-20 23:30:20:580 EDT] Range.hashCode() [0 秒]
[14-03-20 23:30:20:581 EDT] User.hashCode() [0 秒]
[14-03-20 23:30:20:581 EDT] User.hashCode() [0 秒]
[14-03-20 23:30:20:581 EDT] Sheet.hashCode() [0 秒]
[14-03-20 23:30:20:581 EDT] Spreadsheet.hashCode() [0 秒]

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    其他用户需要授权脚本才能发送邮件。您使用的 onEdit 以静默方式工作,不会触发授权过程并且会失败(同样以静默方式)。

    您应该创建一个从菜单执行的简单函数,该函数将要求用户明确授权,就像发生一次的“安装过程”一样。

    您可以通过 onOpen 弹出窗口要求他们这样做,该弹出窗口显示一条消息,仅当用户尚未这样做时才会显示。

    (请注意,由于我使用了您的脚本 xD,因此您知道它适用于其他用户)


    编辑

    经过几次测试,我缩小了问题的范围,它显然来自 getActiveUser 调用。

    如果您将其替换为有效的电子邮件作为字符串,则一切正常。

    如果允许您与域外的人共享应用程序和文档,您能否检查您域的管理员设置?我想情况并非如此,这就是您收到此错误的原因。请在此处更新以确认(或不确认)

    【讨论】:

    • 嗨,Serge,谢谢,但我对每个帐户都这样做了,即使是我的同事也是如此。我进入脚本编辑器并授权每个人电子表格上的脚本。当得到提示时没有发送电子邮件,但是当我发送它时。所有功能正常工作。
    • 嗨,Serge,在我的问题中添加了编辑 2
    【解决方案2】:

    Don't use the Browser.msgBox() function 因为现在(新的 Google 文档)希望所有者做出选择。由于任何其他用户都不是所有者,因此脚本只会在 Browser.msgBox() 之后折叠。

    明确一点:如果您是所有者 - 一切都会按应有的方式运行。当您是用户时,情况会发生变化——将出现一个窗口,让您按下按钮,然后脚本关闭。尝试使用其他方法。

    致 Serge:Google 脚本在所有者的规则下工作。不允许任何用户更改它们。否则你会完全搞砸脚本。大多数用户甚至不必知道什么是脚本以及所有这些技术。

    【讨论】:

      猜你喜欢
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      相关资源
      最近更新 更多