Google apps script 我如何加上一句;发送电子邮件;谷歌工作表每行的按钮?
我有一个谷歌表,有4列输入,用于写电子邮件 我想(快速)为每一行创建一个按钮(都添加在D列中),该按钮将仅利用按钮所在行的信息发送电子邮件 我该怎么做Google apps script 我如何加上一句;发送电子邮件;谷歌工作表每行的按钮?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个谷歌表,有4列输入,用于写电子邮件 我想(快速)为每一行创建一个按钮(都添加在D列中),该按钮将仅利用按钮所在行的信息发送电子邮件 我该怎么做 如何在每行中快速添加多个外观相同的按钮,但每个按钮只能触发使用自己行中的信息发送电子邮件? 如何编写这样的脚本函数,使其将从中获取数据的行更改为仅为“当前”行? 到目前为止,我所尝试的: 我使用Insert>Drawing将一个按钮添加到一行,并为其指定了自定义函数的名称(sendEmail) 我的剧本: function sen
- 如何在每行中快速添加多个外观相同的按钮,但每个按钮只能触发使用自己行中的信息发送电子邮件?
- 如何编写这样的脚本函数,使其将从中获取数据的行更改为仅为“当前”行?
到目前为止,我所尝试的: 我使用Insert>Drawing将一个按钮添加到一行,并为其指定了自定义函数的名称(
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
- 如何添加代码以缩小脚本范围,使其仅处理其指定按钮所在的行?
在实际发送消息之前,您可能需要考虑其他一些数据验证步骤,但这应该是您开始的步骤。以下是一种获取所需内容的方法。每行上都有一个发送电子邮件按钮,其中包含该行的相关数据 代码.gs
function getEmails()
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getDataRange();
var vA=rg.getValues();
var br='<br />';
var s='<table border="1">';
s+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td> </td></tr>', vA[0][0],vA[0][1],vA[0][2]);
for(var i=1;i<vA.length;i++)
{
s+='<tr><td>' + vA[i][0] + '</td><td>' + vA[i][1] + '</td><td>' + vA[i][2] + '</td><td>';
s0=Utilities.formatString('\'%s\',\'%s\',\'%s\'', vA[i][0], vA[i][1], vA[i][2])
s+='<input type="button" value="Email Row ' + Number(i + 1) + '" onClick="sendMyEmail(' + s0 + ');" /></td></tr>';
}
s+='</table>';
return s;
}
function showMy1Dialog()
{
var ui=HtmlService.createHtmlOutputFromFile('myemail');
SpreadsheetApp.getUi().showModelessDialog(ui, 'Title')
}
function sendEmail(email,subj,body)
{
SpreadsheetApp.getActive().toast(email + ', ' + subj + ', ' + body);
MailApp.sendEmail(email,subj,body);
Logger.log('\'%s\',\'%s\',\'%s\'',email,subj,body);
}
函数getEmails()
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getDataRange();
var vA=rg.getValues();
var br=''; var s=''; s+=Utilities.formatString(“%s%s%s”,vA[0][0],vA[0][1],vA[0][2]);
对于(var i=1;iso)这是否会一次发送所有电子邮件(即,每次只为所有行运行单个函数)?这会根据您的问题为单个选定行发送电子邮件。不过,您可以重写循环,为多个选定行发送单独的消息。最终需要测试这一点。效果非常好!非常感谢您提供的优雅而简单的解决方案。我可以问一个后续请求吗?(如果您愿意,可以作为您答案的更新).如何在代码末尾添加一点内容,使第五列包含“已发送电子邮件”成功发送该行的电子邮件后?在末尾添加一行以设置第4列中的状态。您也可以使用此单元格中的值来防止意外发送。按原样,它将发送另一封电子邮件。谢谢。您可以解释其中的一些操作吗?您有任何具体问题吗?
<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>