- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了这个问题,但我不太明白如何解决。所需的行为是访问 Google 电子表格并从模板发送 HTML 电子邮件,该模板包含三个 scriptlet,用于根据电子表格中的数据链接到不同的表单。我对评估模板的调用接近脚本的结尾。
我正在使用两行测试数据。当我阅读执行日志时,一切正常,但奇怪的是,有时会发送两封电子邮件,有时会发送一封电子邮件(当我期待两封电子邮件时),但它并不总是我期望的电子邮件。但每次的结果并不相同。我认为这是因为当调用 HtmlService.createTemplateFromFile('file').evaluate()
时,它在服务器上进行计算,但我的代码只是继续运行并在我得到响应之前完成。这只是猜测。我读过谷歌的HtmlService Page on communicating with servers和 references on google.script.run 。
function sendForms () {
var masterSS = SpreadsheetApp.openById("id");
var masterSheet = masterSS.getSheets()[0];
var masterRange = masterSheet.getDataRange();
var masterData = masterRange.getValues();
var startRow = 1;
for (var i = 1; i < masterData.length; i++) {
var row = masterData[i];
var emailAddress = row[2];
var routineContact = row[5];
var requireDrive = row[6];
var compCheck = row[7];
var affidavit = " ";
if (routineContact != "SENT" && routineContact != "RECEIVED" && routineContact != "No") {
var affidavit = "<li>Form: <a href='https://docs.google.com/forms/d/formid/viewform?usp=send_form'>Affidavit of Compliance with PA Background Checks</a> Verification Code: 169827C9</li>";
masterSheet.getRange(startRow + i, 6).setValue("SENT");
}
var motorVehicleUsage = " ";
if (requireDrive != "SENT" && requireDrive != "RECEIVED" && requireDrive != "No") {
var motorVehicleUsage = "<li>Form: <a href='https://docs.google.com/forms/d/formlink/viewform?usp=send_form'>Motor Vehicle Agreement</a> Verification Code: 13444C9</li>";
masterSheet.getRange(startRow + i, 7).setValue("SENT");
}
var workersCompForm = " ";
if (compCheck != "SENT" && compCheck != "RECEIVED") {
var workersCompForm = "<li>Form: <a href='https://docs.google.com/forms/d/formid/viewform?usp=send_form'>Workers Compensation</a> Verification Code: 13589C9</li>";
masterSheet.getRange(startRow + i, 8).setValue("SENT");
}
if (motorVehicleUsage != " " && workersCompForm != " " && affidavit != " ") {
var sendingDate = new Date();
var formatSendingDate = Utilities.formatDate(sendingDate, "GMT-05:00", 'DD');
masterSheet.getRange(startRow + i, 10).setValue(formatSendingDate);
var subject = "Additional Onboarding Forms";
var template = HtmlService.createTemplateFromFile('Initial Form Email Message');
template.workersCompForm = workersCompForm;
template.motorVehicleUsage = motorVehicleUsage;
template.affidavit = affidavit;
var html = template.evaluate().getContent();
MailApp.sendEmail(emailAddress, subject, "Requires HTML", {htmlBody:html});
}
}
}
这是我的 HTML 文件中包含 scriptlet 的部分。
<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 吗?我应该把它放在哪里?我只是无法全神贯注于与服务器的通信和计时。
将属于 Apps 脚本项目一部分的 HTML 文件添加到此问题,将代码文件更改为我的原始代码,而没有根据 Sandy 的建议进行 google.script.run 调用,即它不在 .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
使用服务器代码。所以,你不会得到 google.script.run
使用 .gs
的脚本文件进行工作扩大。 google.script.run
将在 HTML 的事件属性中运行,例如 onclick()
或在 <script>
与其他 JavaScript 一起标记。
您可以在服务器代码中创建 HTML,并将其发送到某个地方。您可以使用代码中的文字字符串来执行此操作,也可以使用 .html
服务器评估的文件,然后转换为内容。但这还没有通过 google.script.run
完成。 ,这是通过 HTML Service 完成的。
var theHtml = HtmlService.createHtmlOutputFromFile(filename).getContent();
关于google-apps-script - 谷歌应用程序中withsuccesshandler的理解和应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34337012/
我编写了一个 Google Sheets 插件,它使用模式对话框作为界面。我在运行成功处理程序时遇到问题,因此我创建了一个框架接口(interface)进行测试,但也遇到了同样的问题。 每当服务器端函
我正在尝试使用 HTML 服务在 Google Apps 脚本中构建用户界面。我希望我的按钮从“保存”更改为“已保存!”当数据成功保存到用户的脚本属性时。我知道函数 saveProperties 正在
我在 Google App Script(Sheets) 中有这个 HTML 表单,它要求用户输入日期值,然后提交该值。 HTML 表单运行。唯一的问题是 obj 不记录。我不明白这是为什么。 HTM
我将此项目附加到电子表格中: HTML.html: function script2() { google.script.run.doSomething(); } fu
这让我发疯了,代码昨天还在工作,但现在不行了。我尝试再次检查所有语法,但问题仍然存在。来自 Google 表格的此服务器端请求,在服务器端显示值 (Logger.log()),但返回 null在客户端
我试图在谷歌网络应用程序中每分钟运行一次refreshPage()。尽管我似乎无法重复该功能。有人看到任何问题吗?第一次就运行正确。 $(document).ready(function(){
我的代码基于开发人员的 example 。当 $(document).ready 被注释掉时,代码可以运行,但是当取消注释时,updateName 无法执行。 google.script.run.wi
我使用下面提供的代码在单独的 GS 文件中创建了一个数组。我尝试在我的 HTML 文件中调用它。我的目标是将数组的内容与参数 email 进行比较.但是,google.script.run.withS
我有 2 个 google.script.run.withSuccessHandler 调用一个接一个发生,当我尝试将两者结合时,它不起作用。这是有效的代码,所有主要内容都受到影响。 //These
我是一名优秀的程序员,十分优秀!