我有一个包含 4 列输入的 Google 表格,用于编写电子邮件
我想(快速)为每一行创建一个按钮(全部添加到 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/