google-apps-script - 如何将 "Send email"按钮添加到 Google 工作表的每一行?

标签 google-apps-script google-sheets

我有一个包含 4 列输入的 Google 表格,用于编写电子邮件

enter image description here

我想(快速)为每一行创建一个按钮(全部添加到 D 列中),该按钮将仅利用按钮所在行的信息发送电子邮件.

我该怎么做?

  • 如何快速向每一行添加多个外观相同的按钮,但每个按钮仅触发使用其自己行中的信息发送电子邮件?

  • 如何编写这样的脚本函数,以便将其获取数据的行更改为仅“当前”行?


到目前为止我已经尝试过:

我使用“插入”>“绘图”向单行添加了一个按钮,并为其指定了自定义函数的名称 ( 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访问特定列的最佳方式?

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

最佳答案

您无法使用事件触发器,因为单击图像不会从工作表中获取任何数据。更简单的方法是定位行中的事件单元格并使用 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");
}

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

在实际发送消息之前,您可能需要考虑一些其他数据验证步骤,但这应该可以帮助您开始。

关于google-apps-script - 如何将 "Send email"按钮添加到 Google 工作表的每一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45890894/

相关文章:

google-apps-script - Tasks.Tasklists.list 中仅返回 20 个项目

javascript - 如何将 Google 电子表格中的多个单元格中的文本提取到网站上,每个单元格中的每个单元格都位于不同的 <p> 标记中?

google-apps-script - 如何使用基于时间的触发器每小时运行一个脚本,仅在工作日的整点运行?

去阅读谷歌电子表格

javascript - 在数组中查找字符串

javascript - Google Sheets 作为 Ajax 数据库

javascript - Google 脚本共享权

google-apps-script - 访问部署的网络应用程序中的电子表格

google-apps-script - 将谷歌应用程序脚本移动到 v8 文件上传停止从侧边栏工作

javascript - 从 google docs 电子表格中获取单元格的值到 javascript