您可以onOpen()
通过在打开文档后立即打开脚本编辑器,选择“查看 - 执行脚本”来检查触发器函数的执行记录。
在那里,你会发现这样的东西:
[13-08-01 11:53:18:163 EDT] Document.getName() [0 seconds]
[13-08-01 11:53:18:203 EDT] Execution failed: No item with the given ID could be found, or you do not have permission to access it. (line 41, file "Code") [0.052 seconds total runtime]
根据了解触发器,简单触发器不应该允许执行需要身份验证的服务。该限制似乎不适用于Document.getName()
,尤其是在Document.getId()
成功运行之后。对此存在问题,请访问问题 3083并为其加注星标以投票和接收更新。
您会在 DocsList 方法调用中发现类似的问题,但它们并未包含在Google Apps 脚本安全模型中,因此它们被阻止也就不足为奇了。
作为一种变通方法,您可以onOpen()
提醒用户设置文档变量,直到他们这样做。
function onOpen(e) {
DocumentApp.getUi().createMenu('Menu')
.addItem('Set variables', 'setVars')
.addToUi();
var doneFirstRun = ScriptProperties.getProperty('doneFirstRun');
if (doneFirstRun == null) {
var ui = DocumentApp.getUi();
ui.alert( "Set document variables\n\n"
+"Select Menu - Set variables");
}
}
function setVars() {
var ui = DocumentApp.getUi();
var document = DocumentApp.getActiveDocument();
var body = document.getBody();
var bodyText = body.editAsText();
var docID = document.getId();
var url = document.getUrl();
var docName = document.getName(); // Does not work in onOpen
var editors = document.getEditors(); // Does not work in onOpen
var viewers = document.getViewers(); // Does not work in onOpen
var file = DocsList.getFileById(docID);
var docCreated = file.getDateCreated().toString();
var docUpdated = file.getLastUpdated().toString();
// ... do actual work here
// Completed setting document variables - disable reminder.
var doneFirstRun = ScriptProperties.setProperty('doneFirstRun',true);
ui.alert("Completed");
}