如何添加"发送电子邮件"按钮到Google表格的每一行?

时间:2017-08-26 00:34:51

标签: google-apps-script google-sheets

我有一个包含4列输入用于撰写电子邮件的Google工作表

enter image description here

我想(快速)为每一行创建一个按钮(全部添加,例如,列D),该按钮将使用按钮所在行的信息 only 发送电子邮件。

我该怎么做?

  • 如何快速为每一行添加多个相同的按钮,但每个按钮只会触发使用其自身行中的信息发送电子邮件? < / p>

  • 如何对这样的脚本函数进行编码,以便它将数据抓取的哪一行更改为&#34; current&#34;行吗

到目前为止我已尝试过:

我已使用Insert&gt;向单行添加了一个按钮。绘制并为其指定自定义函数的名称(sendEmail)。

我的剧本:

    function sendEmail() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var email = e.values[0];
      var subject = e.values[1];
      var message = e.values[2];
      MailApp.sendEmail(email, subject, message)
    }
  • e.values是访问特定列的最佳方式吗?

  • 如何添加代码以缩小脚本以仅处理其指定按钮所在的行?

2 个答案:

答案 0 :(得分:2)

您无法使用事件触发器,因为点击图片无法从工作表中获取任何数据。更简单的方法是使用Apps脚本定位行中的活动单元格并选择正确的范围。

function sendEmail() {
  // define a couple constants for the function
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const ui = SpreadsheetApp.getUi();

  // Make sure the selected row has text
  if(sheet.getActiveCell().isBlank()) {
    ui.alert("Please select a row with a message");
    return;
  }

  // if valid, get the correct row of data.
    var row = sheet.getActiveCell().getRow();

  // get the range for that row
    var rowRange = sheet.getRange(row, 1, 1, 3).getValues();

  // Build the object to use in MailApp
    var address = rowRange[0][0];
    var subj = rowRange[0][1];
    var body = rowRange[0][2];

    var msg = "Address: " + address + "\nSubject: " + subj + "\nBody: " + body;

  // Here for illustration only
    ui.alert(msg, ui.ButtonSet.OK)

    // MailApp.sendEmail(address, subj, body);

    // set the send status in col 4
    sheet.getRange(row, 4).setValue("Sent");
}

这样,您可以在工作表中使用单个图像运行单个函数。为每行添加图像会变得很麻烦。这是轻量级和有效的。

您希望在实际发送邮件之前考虑其他一些数据验证步骤,但这应该可以帮助您入门。

答案 1 :(得分:1)

这是获得你要求的方式。每行上的发送电子邮件按钮以及该行的附带数据。

Code.gs

<html>
  <head>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
    $(function() {
        google.script.run.withSuccessHandler(displayEmails).getEmails();
      });//gets data from spreadsheet on document ready
    function displayEmails(hl)
    {
      document.getElementById('mydiv').innerHTML=hl;
    }
    function sendMyEmail(email,subj,body)
    {
      google.script.run.sendEmail(email,subj,body);
    }
    console.log('My Code');
    </script>
  </head>
  <body>
   <div id="mydiv">

   </div>
    <input type="button" value="Close" onclick="google.script.host.close();" />
 </body>
</html>

myemail.html

onStart

这是对话框的样子:

enter image description here