サイトに埋め込むことができる Google UI オブジェクトを作成する必要があります。これを行うには、Web アプリとしてデプロイするスクリプトを作成します。( Google Apps Script - Web Appsを参照してください。) そのオブジェクトには、既存のスクリプト関数を呼び出して電子メールを送信するボタンが含まれます。
Web アプリを公開して、ユーザーとして実行します。特定の状況では、アプリへのアクセスを自分に限定したい場合もあります。これは、作成した UI Blob が一般向けに機能しないことを意味します。これは非常に不完全ですが、スクリプトをトリガーする 1 つのボタンを含む BLOB を生成します。
function doGet() {
var app = UiApp.createApplication();
var button = app.createButton('Send Schedule Change Email');
app.add(button);
var handler = app.createServerHandler('myClickHandler');
button.addClickHandler(handler);
return app;
}
function myClickHandler(e) {
var app = UiApp.getActiveApplication();
// Call your library function, e.g.
TeamSpreadsheet.sendScheduleChanged();
var label = app.createLabel('Message Sent')
.setId('statusLabel')
.setVisible(false);
label.setVisible(true);
app.close();
return app;
}
Web アプリは、スプレッドシートに埋め込まれていると思われる既存のスクリプトにアクセスできる必要があります。これを行うには、最初に既存のスクリプトのバージョンを保存し ([ファイル] - [バージョンの管理])、それをライブラリとして新しい Web アプリ スクリプトに追加します ([リソース] - [ライブラリの管理])。ライブラリの詳細については、こちらをご覧ください。Web アプリはユーザーとして実行されるため、スプレッドシートをプライベートに保つことができます。
注意事項
ライブラリ内のユーティリティ スクリプトは、シートの外部から機能する方法でスプレッドシートを開く必要があります。SpreadsheetApp.getActiveSpreadsheet()ではなく、 SpreadsheetApp.openById() を使用してください。残念ながら、openById を使用してホスト スプレッドシートを開くと、puke が発生するため、次のようなものが必要になります。
var ss = null;
try {
// This works for scripts running in the host spreadsheet
ss = SpreadsheetApp.getActiveSpreadsheet();
} catch(err) {
try {
// This works for web apps
ss = SpreadsheetApp.openById("SPREADSHEET ID");
} catch(err) {
Logger.log("Could not open source spreadsheet.");
// Well, then, not much sense carrying on, is there?
return;
}
}
SpreadsheetApp.setActiveSpreadsheet(ss);
...
実際、「アクティブな」オブジェクトから情報を取得するための呼び出しへの依存に注意してください。それらを回避するには、体操をする必要があるかもしれません。
ライブラリ ルーチンをトレースしようとすると、app-script デバッガーが「サーバー エラー」を報告することが多いため、この種の配置のデバッグは苦痛であることがわかりました。
始めるのに役立つことを願っています!