您需要创建一个可嵌入站点的Google UI对象 - 您将通过创建将作为Web应用程序部署的脚本来执行此操作。 (请参阅Google Apps Script - Web Apps。)该对象将包含一个将调用现有脚本函数发送电子邮件的按钮。
发布您的网页应用程序以执行您的操作。针对您的具体情况,您还需要访问仅限于您的应用。这将意味着您创建的用户界面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应用程序需要访问你现有的脚本,我以为嵌入您的电子表格。这是通过首先保存现有脚本的一个版本(文件 - 管理版本),然后将其作为库添加到新的Web应用程序脚本(资源 - 管理库)来完成的。阅读更多关于库here。由于您的网络应用将以您的身份运行,因此您可以保留电子表格的私密性。
注意事项
库中的实用程序脚本,将需要的方式,将来自片外工作,打开您的电子表格;使用SpreadsheetApp.openById(),而不是SpreadsheetApp.getActiveSpreadsheet()。不幸的是,openById pukes当你用它来打开主机的电子表格,所以你想是这样的:
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);
...
事实上,观看上的调用任何依赖摆脱“活动”对象的信息。你可能需要做一些体操来解决它们。
我发现调试这种类型的安排是痛苦的,因为应用程序脚本调试程序通常在您尝试追踪库例程时报告“服务器错误”。
我希望能帮助你开始!
您是否正在使用谷歌网站?你想让它在你的页面上作为一个小工具运行吗?或者它会是一个独立的Web应用程序,拥有自己的URL? –
这不是一个谷歌网站。我想这将是一个独立的网络应用程序。我只想能够发送群发邮件到列表中。在我尝试应用程序脚本之前,我考虑将电子邮件地址存储在Web服务器上存储的XML文档中。我希望使用JS循环XML并调用MAILTO之类的东西:对于每一个,但我没有成功。有没有更好的方式来做到这一点与JavaScript? – Aheinlein