Я думаю, e.source
предоставляется только для того, чтобы вам не нужно было вызывать DocumentApp.getActiveDocument()
в вашем триггере, как вы указали. Это полезно, потому что вы можете захотеть манипулировать документом, поэтому наличие его означает, что вам не нужно делать дополнительный вызов.
Глобальный var doc = e.source
не будет работать, потому что скрипт -приведены каждый раз, когда вы запускаете его. Поэтому, как только ваш onOpen()
завершит работу, ни одно из ваших значений переменных не будет сохраняться.
Это не будет работать, потому что значение doc
будет неопределенным после завершения onOpen()
.
var doc;
function onOpen(e) {
doc = e.source;
}
function foo() {
DocumentApp.getUi().alert(doc.getName());
}
Это будет работать, потому что это тот же экземпляр скрипта, что и при onOpen()
был вызван, это означает, что значение doc
определено .
var doc;
function onOpen(e) {
doc = e.source;
foo();
}
function foo() {
DocumentApp.getUi().alert(doc.getName());
}
В конечном счете, лучший способ заставить doc
работать глобально, это просто сохранить DocumentApp.getActiveDocument()
к этому. Это означает, что DocumentApp.getActiveDocument()
будет вызываться каждый каждый раз, когда вы выполняете сценарий, независимо от того, нужен ли вам документ или нет. Так что подумайте, действительно ли вам это нужно во всем мире.
var doc = DocumentApp.getActiveDocument();
function onOpen(e) {
// do something
}
function foo() {
DocumentApp.getUi().alert(doc.getName());
}