Google apps script 在google应用程序中理解和应用SuccessHandler 背景
我有一个问题,我真的不知道如何解决。理想的行为是访问google电子表格,并从包含三个脚本的模板发送HTML电子邮件,根据电子表格中的数据链接到不同的表单。我对模板求值的调用已接近脚本的末尾 我使用两行测试数据。当我阅读执行日志时,一切正常,但奇怪的是,有时会发送两封电子邮件,有时会发送一封电子邮件(当我期待两封电子邮件时),而且并不总是我期待的电子邮件。但每次的结果都不一样。我认为这是因为当调用Google apps script 在google应用程序中理解和应用SuccessHandler 背景,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个问题,我真的不知道如何解决。理想的行为是访问google电子表格,并从包含三个脚本的模板发送HTML电子邮件,根据电子表格中的数据链接到不同的表单。我对模板求值的调用已接近脚本的末尾 我使用两行测试数据。当我阅读执行日志时,一切正常,但奇怪的是,有时会发送两封电子邮件,有时会发送一封电子邮件(当我期待两封电子邮件时),而且并不总是我期待的电子邮件。但每次的结果都不一样。我认为这是因为当调用HtmlService.createTemplateFromFile('file').evaluat
HtmlService.createTemplateFromFile('file').evaluate()
时,它在服务器上进行计算,但我的代码一直在运行并在得到响应之前完成。这只是猜测。我读过谷歌和谷歌的
守则和工作
函数sendForms(){
var masterSS=SpreadsheetApp.openById(“id”);
var masterSheet=masterSS.getSheets()[0];
var masterRange=masterSheet.getDataRange();
var masterData=masterRange.getValues();
var startRow=1;
对于(变量i=1;i格式:验证代码:169827C9”;
masterSheet.getRange(startRow+i,6).setValue(“已发送”);
}
var motorVehicleUsage=“”;
if(requireDrive!=“已发送”&&requireDrive!=“已接收”&&requireDrive!=“否”){
var motorVehicleUsage=“格式:验证代码:13444C9 ”;
masterSheet.getRange(startRow+i,7).setValue(“已发送”);
}
var workersCompForm=“”;
如果(compCheck!=“已发送”和&compCheck!=“已接收”){
var workersCompForm=“格式:验证代码:13589C9 ”;
masterSheet.getRange(startRow+i,8).setValue(“已发送”);
}
如果(机动车保险!=“”&工人赔偿表格!=“”&宣誓书!=“”){
var sendingDate=新日期();
var formatSendingDate=Utilities.formatDate(发送日期,“GMT-05:00”,“DD”);
masterSheet.getRange(startRow+i,10).setValue(formatSendingDate);
var subject=“其他入职表格”;
var template=HtmlService.createTemplateFromFile(“初始格式电子邮件”);
template.workersCompForm=workersCompForm;
template.motorVehicleUsage=机动车sage;
模板。宣誓书=宣誓书;
var html=template.evaluate().getContent();
sendmail(emailAddress,主题,“需要HTML”{htmlBody:HTML});
}
}
}
这是我的HTML文件中包含脚本的部分
<p>We would like you to complete the following additional...</p>
<ul>
<?!= workersCompForm ?><?!= motorVehicleUsage ?><?!= affidavit ?>
</ul>
我们希望您完成以下附加内容
我最初在var html上面有if语句,并且有var html=template.evaluate().getContent();在底部,就在MailApp上方。那就是我得到不一致结果的时候
google.script.run.html()根本不起作用,因为即使在阅读了文档之后,我也不知道如何使用它
问题:
我很确定我需要一个withSuccessHandler在这个脚本中的某个地方,但我无法概念化它放在哪里或者如何工作。我试图创建var html=function();但没能成功。我应该使用withSuccessHandler吗?我应该把它放在哪里?我就是无法集中精力与服务器通信和计时
更新
将作为应用程序脚本项目一部分的HTML文件添加到此问题中,根据Sandy的建议将代码文件更改为我的原始代码,而不使用google.Script.run调用。Sandy建议它不在.gs文件中运行。我仍然有同样的问题,虽然看起来随机电子邮件正在发送。有时是第一个for循环发送电子邮件,有时是第二个for循环发送电子邮件,当我在电子表格上设置了发送两个循环的条件时
我替换了
var template=HtmlService.createTemplateFromFile('Initial Form Email Message')代码>带有var template=HtmlService.createHtmlOutputFromFile('Initial Form Email Message')没有运气,所以我尝试了var template=HtmlService.createHtmlOutputFromFile('Initial Form Email Message').getContent()代码>并且通过这些尝试无法发送任何电子邮件。但是电子表格总是使用正确的值进行更新。google.script.run
就是所谓的“客户端API”。“客户端”是指它在用户计算机的浏览器中运行google.script.run
不是从.gs
服务器代码中使用的。因此,您不会从扩展名为.gs
的脚本文件中获得google.script.run
google.script.run
将在HTML的事件属性中运行,如onclick()
或与其他JavaScript一起在
标记中运行
您可以在服务器代码中创建HTML,并将其发送到某个地方。您可以使用文本字符串(代码中有文本字符串)执行此操作,也可以使用服务器计算的.html
文件,然后将其转换为内容。但这不是通过google.script.run完成的,而是通过HTML服务完成的
var theHtml = HtmlService.createHtmlOutputFromFile(filename).getContent();
你好,桑迪,很好,谢谢你解释为什么我尝试使用google.script.run是徒劳的。我怀疑它只应该在HTML文件中调用。我用我原来的代码更新了我的问题,这让我有了奇怪的电子邮件行为。我不知道是否需要添加电子表格的副本,但我不明白为什么它的行为如此不规则。a.你愿意吗
var theHtml = HtmlService.createHtmlOutputFromFile(filename).getContent();