Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在google应用程序中理解和应用SuccessHandler 背景_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 在google应用程序中理解和应用SuccessHandler 背景

Google apps script 在google应用程序中理解和应用SuccessHandler 背景,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个问题,我真的不知道如何解决。理想的行为是访问google电子表格,并从包含三个脚本的模板发送HTML电子邮件,根据电子表格中的数据链接到不同的表单。我对模板求值的调用已接近脚本的末尾 我使用两行测试数据。当我阅读执行日志时,一切正常,但奇怪的是,有时会发送两封电子邮件,有时会发送一封电子邮件(当我期待两封电子邮件时),而且并不总是我期待的电子邮件。但每次的结果都不一样。我认为这是因为当调用HtmlService.createTemplateFromFile('file').evaluat

我有一个问题,我真的不知道如何解决。理想的行为是访问google电子表格,并从包含三个脚本的模板发送HTML电子邮件,根据电子表格中的数据链接到不同的表单。我对模板求值的调用已接近脚本的末尾

我使用两行测试数据。当我阅读执行日志时,一切正常,但奇怪的是,有时会发送两封电子邮件,有时会发送一封电子邮件(当我期待两封电子邮件时),而且并不总是我期待的电子邮件。但每次的结果都不一样。我认为这是因为当调用
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();