Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在appscript和send as table中对列执行文本发送_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 在appscript和send as table中对列执行文本发送

Javascript 在appscript和send as table中对列执行文本发送,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我目前有一个代码,可以将一组连接在一起的数据从谷歌表单发送到gmail 谷歌表单中的输入如下: 第一张图片 虽然电子邮件中的输出如下所示: 第二张图片 但是,我想问一下,是否可以采用“文本到列”的方式将活动和截止日期拆分为两列,并以表格的形式发送,如下所示: 第三张图片 我尝试过扫描多个站点,但在应用程序脚本中,复制“文本到列”的方法似乎并不常见(不确定)。我还搜索了其他度量方法,但它与模板的结构不太匹配,模板中的一列中有电子邮件收件人,而要发送给他们的项目则在另一列中。请允许我询问您关于

我目前有一个代码,可以将一组连接在一起的数据从谷歌表单发送到gmail

谷歌表单中的输入如下:

第一张图片

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

第二张图片

但是,我想问一下,是否可以采用“文本到列”的方式将活动和截止日期拆分为两列,并以表格的形式发送,如下所示:

第三张图片

我尝试过扫描多个站点,但在应用程序脚本中,复制“文本到列”的方法似乎并不常见(不确定)。我还搜索了其他度量方法,但它与模板的结构不太匹配,模板中的一列中有电子邮件收件人,而要发送给他们的项目则在另一列中。请允许我询问您关于如何进行此操作的建议-关于“文本到列”复制或一种新的方法

谢谢

----编辑---

为了与大家分享,我们这里有活动表、电子邮件收件人和截止日期

第四张图片

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

我们的代码循环到上述不同的收件人,并将他们各自的过期活动发送给他们。然而,它发送的是第二个图像中的图像,而我们想要的是第三个图像

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

假设:

  • 您希望通过电子邮件发送的数据列很少
  • 某些电子邮件地址重复,您只希望向每个收件人发送一封电子邮件(一个收件人可以有多个活动)
  • 您希望为发送的每封电子邮件构建一个HTML表
在这种情况下,我建议您获取源数据中存在的不同收件人的数组,然后基于该数组发送电子邮件。我编写了一个小代码来实现这一点(检查内联注释以获得代码在每行执行的更多细节):

函数sendEmails(){ var ss=SpreadsheetApp.getActive(); var sheet=ss.getSheetByName(“Sheet1”);//请相应更改 var firstRow=2; var-firstCol=1; var numRows=sheet.getLastRow()-1; var numCols=3; var values=sheet.getRange(firstRow、firstCol、numRows、numCols).getValues();//从源获取值(前3列,从第2行开始) //使用不同的收件人创建一个数组: 风险值=[]; 对于(变量i=0;i 关于这段代码有几点需要考虑:

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

我希望这能有所帮助。

你能提供你正在使用的代码吗?这个问题需要更多的关注。您是在寻找将文本拆分为列的方法,还是构建html表并发送电子邮件,或者两者兼而有之?请避免一次问多个问题。嗨@AntonDementiev,我相信我想创建表格并将其作为电子邮件发送。根据我们的数据结构(每个换行符都有活动和截止日期),将文本拆分为列只来自“如何”问题。因此,这也可以是“两者皆有”,但如果我们能有其他方法来构建表,我会很好。我必须把问题的“原始表格”包括在内。哇,非常感谢您的快速回复。我将对此进行测试并向您提供最新信息。再次感谢@哦,是的!很抱歉,我差点忘了结束这个问题。你所提供的指导使我取得了理想的结果。非常感谢!
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
    });
  }
}