您需要创建一个可以嵌入到您的网站中的 Google UI 对象 - 您将通过创建一个将部署为网络应用程序的脚本来做到这一点。 (请参阅Google Apps Script - Web Apps。)该对象将包含一个按钮,该按钮将调用您现有的脚本函数来发送电子邮件。
发布您的网络应用程序以像您一样执行。对于您的具体情况,您还希望能够访问仅限于您的应用程序。这意味着您创建的 UI Blob 将无法为公众使用。这是非常不完整的,但会生成一个带有单个按钮的 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 应用程序脚本(资源 - 管理库)来完成的。阅读更多关于图书馆的信息here。由于您的网络应用程序将以您的身份运行,因此您可以将电子表格保密。
注意事项
您的库中的实用程序脚本需要以一种可以在工作表之外工作的方式打开您的电子表格;使用SpreadsheetApp.openById(),而不是SpreadsheetApp.getActiveSpreadsheet()。不幸的是,当您使用它打开主机电子表格时,openById 会呕吐,所以您需要这样的东西:
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);
...
事实上,注意任何依赖调用从“活动”对象获取信息的情况。您可能需要做一些体操来绕过它们。
我发现调试这种类型的安排很痛苦,因为当您尝试跟踪库例程时,应用程序脚本调试器经常报告“服务器错误”。
我希望这可以帮助您入门!