【问题标题】:Passing js Variable to html file GAS - BASIC将 js 变量传递给 html 文件 GAS - BASIC
【发布时间】:2015-09-07 06:00:03
【问题描述】:

我正在尝试将一个变量(我在单元格 A1 中的名字)从我的 code.gs 传递到我的 Index.html 并通过电子邮件发送。

谁能告诉我我做错了什么或指出我正确的方向。

代码.gs

function doGet() {
return HtmlService.createHtmlOutputFromFile('Index');
}

function sendEmail() {
var ss = SpreadsheetApp.openById('MY_SPREADSHEET_ID');
var sheet = ss.getSheetByName('Sheet1');

var myName = sheet.getRange(1,1).getValue();

var template = HtmlService.createTemplateFromFile('Index');
var body = template.evaluate().getContent();

// SEND THE EMAIL
MailApp.sendEmail({
  subject:"Test Email",
  to:"example@domain.com",
  htmlBody: body,
});

return myName;

Index.html

<!DOCTYPE html>

<html>  
  <body>
  <p><? var data = sendEmail(); ?><?= data ?></p>
  </body>
</html>

【问题讨论】:

  • 我认为问题在于递归。为了发送电子邮件(函数 sendEmail),必须评估模板,但为了评估模板,必须执行函数 sendEmail -> 永恒循环。您可以通过将模板中的 sendEmail 函数分离到 doGet 函数来对其进行转义。
  • @WimdenHerder 抱歉,但我不明白如何将它们分开。你能举个例子吗?感谢您迄今为止的帮助!
  • 您是否已经用实际的电子表格 ID 替换了 'MY_SPREADSHEET_ID' ?它应该类似于这个:1eTQYnI3jOKtyWF1V1DbuF8pdzpUwRNr9podKcoORD68.
  • 是的 Rubén,我只是为了这个问题把那个 ID 放在那里
  • 好。如果您将使用 Index.html 调用 sendEmail 函数,您应该将您的电子邮件正文移动到另一个位置。 IE。您可以在 Code.gs 中构建正文代码或使用第二个 HTML 文件。

标签: javascript html google-apps-script google-sheets evaluate


【解决方案1】:

阅读本文,pushing variables to templates

 function doGet() {
    return HtmlService.createHtmlOutputFromFile('Index');
    }

    function sendEmail() {
    var ss = SpreadsheetApp.openById('MY_SPREADSHEET_ID');
    var sheet = ss.getSheetByName('Sheet1');

    var myName = sheet.getRange(1,1).getValue();

    var template = HtmlService.createTemplateFromFile('Index');
    template.data = myName;
    var body = template.evaluate().getContent();

    // SEND THE EMAIL
    MailApp.sendEmail({
      subject:"Test Email",
      to:"example@domain.com",
      htmlBody: body,
});

Index.html

<!DOCTYPE html>

<html>  
  <body>
  <p><strong><?= data ?></strong></p>
  </body>
</html>

【讨论】:

    【解决方案2】:

    当我发现它时问题仍然存在并且我遇到了类似的问题,所以这是我的解决方案(没有 doGet()),基于来自 Wim den Herder 和 Rubén 的有用 cmets(以及 @987654321 中的示例@):

    代码.gs

    function sendEmail() {
    var recipient = 'test@mail.de';
    var subject = 'Test Email'; 
    var message =     HtmlService.createTemplateFromFile('Index').evaluate().getContent();;
    
    
    // SEND THE EMAIL 
    GmailApp.sendEmail(
          recipient,         
          subject,                            
          message, {                        // body
          htmlBody: message                 // advanced options
        });
    
    }
    
    function getData(){
    var ss = SpreadsheetApp.openById('MySpreadSheetId');
    var sheet = ss.getSheetByName('Sheet1');
    // Data is in cell A1
    var myName = sheet.getRange(1,1).getValue();
    return myName
    }
    

    索引.html

    <!DOCTYPE html>
    
    <html>  
      <body>
      <p><strong><? var data = getData() ?><?= data ?></strong></p>
      </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多