Google电子表格如何允许共享用户执行脚本

时间:2014-03-20 15:00:52

标签: google-apps-script google-sheets

我的Google电子表格存在问题/疑问。当我在电子表格中执行脚本时,脚本运行正常,但是当我与域中的人共享表单时,完整的脚本不会执行。

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

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

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

以下是测试的电子表格: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秒]
[14-03-20 23:30:20:340 EDT] Logger.log([columnStart:14,[]])[0秒]
[14-03-20 23:30:20:341 EDT] Logger.log([e.value:正在进行,[]])[0秒]
[14-03-20 23:30:20:341 EDT] Logger.log([进行中,[]])[0秒]
[14-03-20 23:30:20:346 EDT] Browser.msgBox([科伦坡团队电子邮件,电子邮件将发送到Venun Colombo团队。你想发送这封电子邮件吗?,YES_NO])[0秒]
[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秒]

2 个答案:

答案 0 :(得分:1)

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

您应该创建一个简单的函数,该函数从菜单中执行,该函数将要求用户进行一次“安装过程”的显式授权。

您可以让他们这样做,使用onOpen弹出窗口显示只有在用户尚未显示的情况下才会显示的消息。

(请注意,自从我使用您的脚本xD以来,您知道它适用于其他用户)


修改

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

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

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

答案 1 :(得分:0)

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

要说清楚:如果你是主人 - 一切都会按预期运作。当您是用户时,事情会发生变化 - 会出现一个窗口,让您按下按钮,然后脚本就会关闭。尝试使用其他方法。

To Serge:谷歌脚本只能按照所有者的规则 工作。不允许用户更改它们。否则你将完全弄乱脚本。大多数用户甚至不必知道什么是脚本和所有这些技术。