この例では、ホスト シートとスクリプトのコピーを作成しているように見えるためonEdit
、テンプレート スクリプト内の単純なトリガーとして追加できます。つまり、次のように定義された関数ですfunction onEdit() { // do stuff }
。
この関数は、スプレッドシート自体とともにコピーされます。
function onEdit() {
// This function being present will automatically add an onEdit trigger
// It can act as a parent for calling any other functions
// e.g. onChange() as per your example
}
同じスクリプトの多くのコピーが浮かんでいる可能性が高い場合に行うことができる改善の 1 つは、別の場所のライブラリでホストされているハンドラー関数を呼び出して、トリガーされたコードを 1 か所に保持することです。開発モードをオンにして外部スクリプトをライブラリとして添付すると、このライブラリは元のスプレッドシートに作成したコピーにも添付されます。これにより、すべてのコピーを開くことなく、トリガーされたコードを修正できます
最初にトリガーしたい関数を複製するハンドラー関数を使用して、スタンドアロンの GS スクリプトを作成します。したがって、アクティブなシートを Id で渡す必要があります。
function editFunction(event) {
try {
var range = event.source.getActiveSheet().getActiveSelection();
return "cells " + range.getA1Notation() + \
" changed to " + range.getValues().toString() + \
" in \"" + event.source.getName() + \
"\" by " + Session.getEffectiveUser();
} catch (err) {
return err;
}
}
次に、テンプレート スプレッドシートで、外部スクリプトをライブラリとして追加します (例: という名前EditLibrary
)。
単純な関数内でonEdit()
は、インラインではなく Library 関数を呼び出すだけです。イベントの詳細をパラメーターとして渡します。
function onEdit() {
Browser.msgBox(EditLibrary.editFunction(eventObject));
}
これにより、triggerBuilder を使用する必要がなく、後でコードを修正できるようにする必要があります。