gpt4 book ai didi

javascript - 对应用程序脚本中的列执行文本并作为表格发送

转载 作者:行者123 更新时间:2023-12-02 22:19:48 25 4
gpt4 key购买 nike

我目前有一个代码,可以将一组串联的数据从 Google 表格发送到 Gmail。

谷歌表格中的输入如下:

第一张图片

enter image description here

而电子邮件中的输出如下所示:

第二张图片

enter image description here

但是,我想问是否可以采用“文本到列”类型的方式将事件和截止日期分成两列,并以表格的形式发送它们,该表格应该看起来像像这样:

第三张图片

enter image description here

我已尝试扫描多个网站,但在应用脚本中复制“文本到列”方法似乎并不常见(不确定)。我也搜索了替代措施,但它不适用于我们的模板的结构,该模板将电子邮件收件人放在一列中,而要发送给他们的项目放在另一列中。我能否请您就如何进行此操作提供建议 - 无论是“文本到列”复制还是新方法。

谢谢!

----编辑----

仅供分享,我们有这张事件表、电子邮件收件人和截止日期。

第四张图片

4th image

从此列表中,我们现在使用多个公式来得出上面的第一张图片(仅包含到期的事件及其电子邮件收件人)。。这是因为我们实际上有大约数百个事件,并且我们不想按每行到期事件发送电子邮件,而是按每个电子邮件收件人且仅发送他/她的到期事件。

我们的代码循环到上面的不同收件人,并向他们发送各自的逾期事件。然而,它发送的是第二张图片中的图片,而我们想要的是第三张图片。

阅读评论后,也许我们可以问:如何从源数据中提取逾期事件,为每个收件人创建表格,并将其发送给每个收件人。通过这种方式,我们将不再对每个收件人的逾期事件进行串联(第一个图像)

最佳答案

假设:

  • 您想要通过电子邮件发送的数据列很少。
  • 某些电子邮件地址重复,您只想向每个收件人发送一封电子邮件(一个收件人可以有多项事件)。
  • 您想要为发送的每封电子邮件构建一个 HTML 表格。

在这种情况下,我建议获取源数据中存在的不同收件人的数组,然后根据该数组发送电子邮件。我编写了一段小代码来完成此任务(检查内联注释以获取有关代码在每行执行的操作的更多详细信息):

function sendEmails() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Sheet1"); // Please change accordingly
var firstRow = 2;
var firstCol = 1;
var numRows = sheet.getLastRow() - 1;
var numCols = 3;
var values = sheet.getRange(firstRow, firstCol, numRows, numCols).getValues(); // Get values from source (first 3 columns, starting at row 2)
// Create an array with the different recipients:
var recipients = [];
for (var i = 0; i < values.length; i++) {
if (recipients.indexOf(values[i][1]) == -1) { // Check that the recipient has not been previously added to the array
recipients.push(values[i][1]); // Add new recipient to the array
}
}
// Create and send an email for each recipient in the array:
for (var i = 0; i < recipients.length; i++) {
var htmlBeginning = "<div>Body beginning</div>";
var htmlEnding = "<div>Body ending</div>";
var table = "<table border=\"1\"><tr><th>Activities</th><th>Due date</th></tr>"; // Table headers
for (var j = 0; j < values.length; j++) {
if (recipients[i] == values[j][1]) { // Check that the email address matches.
// Add row for each activity with this recipient:
var row = "<tr><td>" + values[j][0] + "</td><td>" + values[j][2] + "</td></tr>";
table = table.concat(row); // Append new row to the table
}
}
table = table.concat("</table>");
var emailBody = htmlBeginning.concat(table, htmlEnding);
// Send email
MailApp.sendEmail({
to: recipients[i],
subject: "Your subject",
htmlBody: emailBody
});
}
}

关于此代码,需要考虑以下几点:

  • 您应该包含表格之前和之后的电子邮件正文的任何​​部分(分别在我提供的代码中的变量 htmlBeginninghtmlEnding 中)。
  • 我认为数据放置在从第 2 行开始的 A 列(事件)、B(电子邮件地址)和 C(结束日期)列中。
  • 本例中源数据所在的工作表名为Sheet1,请进行相应更改。

希望这对您有所帮助。

关于javascript - 对应用程序脚本中的列执行文本并作为表格发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59268995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com