建立表格电子邮件

时间:2016-02-24 16:51:24

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

  

理念:

  • 用户从打开Goog​​le边栏的菜单中选择“电子邮件”。
  • 它会提示用户使用单选按钮选择他们的现场办公室位置,并为带有文本区域的电子邮件正文添加其他消息
  • 用户点击提交并运行“FFO_Email”功能

“FFO_Email”功能将执行以下操作

  • 根据电台选择确定现场办公室位置
  • 根据Field Office位置(' FFO-IS'!A3:A12)确定电子邮件列表,并在“FFO-IS”表格中确定电子邮件的右侧(' FFO-IS&# 39; B3:H12)
  • 创建电子邮件主题
  • 创建电子邮件正文(将包含侧边栏中文本区域的附加邮件
  • 最后向个人发送电子邮件,并在侧栏中显示电子邮件已成功发送的消息
  

我遇到的问题

所选的无线电Field Office Location和Additional Message未传递给FFO_Email.gs函数。因此,不向个人发送电子邮件。

  

可在此处找到工作表

https://docs.google.com/a/cougars.ccis.edu/spreadsheets/d/1PK18AXMlfC2reKRP7IJWHRT9TEnDzfWa3g-uavgsxUk/edit?usp=sharing

FFO_email.html



<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
<!DOCTYPE html>
<html>

<head>
  <base target="_top">

  <script>
    function onSuccess(fieldOffice, AdditionalMessage) {
      var div = document.getElementById('fieldOfficeFFO');
      div.innerHTML = 'Email for ' + fieldOffice + ' has been sent successfully.';
    }
    google.script.run.withSuccessHandler(onSuccess)
      .FFO_Email();
  </script>

</head>

<body>

  <form id=fieldOfficeFFO>

    <fieldset style="background-color:LightGray;width:250px">

      <div>
        <label for="Field Office Select">Please select your field office below.</label>
      </div>

      <div>
        <input type="radio" name="fieldOfficeFFO" id="fieldOfficeFFO" value="ARK_E_TEXAS">
        <label for="ARK_E_TEXAS">ARK_E_TEXAS</label>
      </div>
      <div>
        <input type="radio" name="fieldOfficeFFO" id="fieldOfficeFFO" value="BORDER_EAST">
        <label for="BORDER_EAST">BORDER_EAST</label>
      </div>
      <div>
        <input type="radio" name="fieldOfficeFFO" id="fieldOfficeFFO" value="BORDER_WEST">
        <label for="BORDER_WEST">BORDER_WEST</label>
      </div>
      <div>
        <input type="radio" name="fieldOfficeFFO" id="fieldOfficeFFO" value="CENTRAL_TEXAS">
        <label for="CENTRAL_TEXAS">CENTRAL_TEXAS</label>
      </div>
      <div>
        <input type="radio" name="fieldOfficeFFO" id="fieldOfficeFFO" value="DALLAS">
        <label for="DALLAS">DALLAS</label>
      </div>
      <div>
        <input type="radio" name="fieldOfficeFFO" id="fieldOfficeFFO" value="FORT_WORTH">
        <label for="FORT_WORTH">FORT_WORTH</label>
      </div>
      <div>
        <input type="radio" name="fieldOfficeFFO" id="fieldOfficeFFO" value="GULF_COAST">
        <label for="GULF_COAST">GULF_COAST</label>
      </div>
      <div>
        <input type="radio" name="fieldOfficeFFO" id="fieldOfficeFFO" value="LOUISIANA">
        <label for="LOUISIANA">LOUISIANA</label>
      </div>
      <div>
        <input type="radio" name="fieldOfficeFFO" id="fieldOfficeFFO" value="NEW_MEXICO">
        <label for="NEW_MEXICO">NEW_MEXICO</label>
      </div>
      <div>
        <input type="radio" name="fieldOfficeFFO" id="fieldOfficeFFO" value="OKLAHOMA">
        <label for="OKLAHOMA">OKLAHOMA</label>
      </div>
    </fieldset>

    <br>
    <br>

    <fieldset>
      <div class="form-group">
        <label for="AdditionalMessage">Additional Message</label>
        <textarea id="AdditionalMessage" rows="3" style="width:250px"></textarea>
      </div>
    </fieldset>

  </form>

  <div class="block">
    <button class="blue" onclick="onSuccess(fieldOfficeFFO,AdditionalMessage)">Submit</button>
    <button onclick="google.script.host.close()">Close</button>
  </div>

</body>

</html>
&#13;
&#13;
&#13;

FFO_Email.gs

&#13;
&#13;
function FFO_Email(fieldOfficeFFO, AdditionalMessage) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('FFO-IS')
  var firstRow = 3;
  var lastRow = 10;
  var dataRange = sheet.getRange(firstRow, 1, lastRow, 8);
  var myDate = new Date();
  var hrs = myDate.getHours();

  //Determines the row the Field Office is in
  for (var j = 0; j < dataRange.length; j++) {
    if (dataRange[j][0] == fieldOfficeFFO) {
      Logger.log((j + 1))
      return j + 1;
    }
  }

  //Create the greeting based on the time of day
  var greeting;

  if (hrs < 12)
    greeting = 'Good Morning';
  else if (hrs >= 12 && hrs <= 17)
    greeting = 'Good Afternoon';
  else if (hrs >= 17 && hrs <= 24)
    greeting = 'Good Evening';


  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];

    var field_Office = fieldOfficeFFO;
    var PT_Director = dataRange.getValues(j, 2);
    var PT_Manager = dataRange.getValues(j, 3);
    var PT_Management_Specialist = dataRange.getValues(j, 4);
    var Area_Supervisory_AM = dataRange.getValues(j, 5);
    var Area_AM = dataRange.getValues(j, 6);
    var SC_Senior_Property_Manager = dataRange.getValues(j, 7);
    var AMS = dataRange.getValues(j, 8);
    var email_Subject = field_Office + " FFO / Income Statement Report is ready for viewing";
    var message_Body = greeting + "," +
      "<br> <br>" +
      "The " + field_Office + " <b>FFO / Income Statement Report is ready for viewing in</b> the <i>AMS Standard Reports - R07 Google Folder</i>" +
      " located at https://drive.google.com/drive/u/0/folders/0Bx1aKS2V9K-kb0tNLXFfbGtmalE" +
      "<br> <br>" +
      "<br> <br>" +
      //Additional Message from html side added here
      AdditionalMessage +
      "<br> <br>" +
      "Thank you." +
      "<br> <br>" +
      AMS;


    //Send email
    MailApp.sendEmail({
      to: SC_Senior_Property_Manager + "," + Area_AM + "," + AMS,
      cc: PT_Director + "," + PT_Manager + "," + PT_Management_Specialist + "," + Area_Supervisory_AM,
      replyTo: AMS,
      subject: email_Subject,
      htmlBody: message_Body
    });
    return fieldOfficeFFO
    SpreadsheetApp.flush();
    Utilities.sleep(1000);
  }
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

同一组中的无线电输入不能具有相同的id=。 如果您想要对它们进行分组,那么为它们提供相同的名称属性是可以的。 Textarea根本没有name=属性。

答案 1 :(得分:0)

需要做出很多改变:

我为提交创建了一个新功能,我称之为enyo.kind({ name: "myapp.MainView1", kind: "FittableRows", fit: true, components:[ {kind: "onyx.Toolbar", content: "Hai-->>"}, {kind: "enyo.Scroller", fit: true, components: [ {name: "main", classes: "nice-padding", allowHtml: true} ]}, {kind: "onyx.Toolbar", components: [ {kind: "onyx.Button", content: "Go Back", ontap: "helloWorldTap"} ]} ], create : function(){ this.inherited(arguments); console.log("MainView1 is created in memory"); }, rendered : function(){ this.inherited(arguments); console.log("MainView1 is created in rendered into DOM"); }, helloWorldTap: function(inSender, inEvent) { //this.$.main.addContent("The button was tapped. "); //window.location="#"; new myapp.Application().router.trigger({location:'/ ',change:true}); } });

脚本标记:

sendInputInfo()

更改<script> function sendInputInfo() { console.log('sendInputInfo ran!');//Open browsers console to see print out //Get the form information to be sent var theFormElement = document.getElementById('fieldOfficeFFO'); google.script.run.withSuccessHandler(onSuccess) .FFO_Email(theFormElement); }; function onSuccess(fieldOffice, AdditionalMessage) { div.innerHTML = 'Email for ' + fieldOffice + ' has been sent successfully.'; }; </script> 属性:

onclick

请注意,括号中没有值发送到函数。这不是必需的。表单正在<button class="blue" onclick="sendInputInfo()">Submit</button> 函数中检索。

目前,代码未将任何信息传递给服务器。服务器功能的括号中没有任何内容:

目前:

sendInputInfo()

括号中需要有一些东西:

.FFO_Email();

您的.FFO_Email(theFormElement); 代码在括号中有两个参数。如果是脚本,则Apps脚本只接受服务器端的一个输入。因此,您需要将功能更改为:

.gs