Google表格内容通过电子邮件发布(布局)

时间:2016-03-21 15:48:27

标签: google-apps-script google-sheets

我在Google工作表中列出了一系列事件。它是一张包含4列数据和几十行的工作表。当下周发生的事件发生时,我想自动发送一封电子邮件。

我在Google工作表中有一个标签,用于过滤即将举办的活动。所以我只需要将这些数据复制到电子邮件中。

它适用于此代码:

var first = ss.getSheetByName("Sheet2");
first.activate();

var sheet = SpreadsheetApp.getActiveSheet();
var data = first.getDataRange().getValues();

// Generate content 

var body = [];
for (var x = 0; x <data.length; x++)
body.push(data[x] + "\n");
body.push("/n" + "That's all for next week");

MailApp.sendEmail(mailaddress, subject, "Upcoming events" +"\n" +"\n" + body)

问题是它看起来很糟糕。在邮件中它看起来像这样:

CAR,Thu Mar 24 2016 08:00:00 GMT+0100 (CET),FY,c
,INBEV,Wed Apr 27 2016 09:00:00 GMT+0200 (CEST),AGM,c

日期信息太长,并且单元格之间没有间距。我想看到这样的事情:

Car * Mar 24 * FY (c)
INBEV * Apr 27 * AGM (c)

我对javascript和google-apps脚本有非常基本的了解。继续前进的方法是什么?如何调整输出?

修改 在使用Sandy Good的建议后,它工作正常。除了以逗号(,)开头的第二行。它不是价值的一部分,所以我不能用子串切断它。有人知道为什么表单中的第二行(和第三行,第四行......)以逗号开头?

EDIT2

这就是我目前正在使用的内容。它只从工作表中获取最后一行,因为我从数组切换到文本作为输入。身体没有真正组装,内容在最终发送之前一直被替换。

function myFunction() {
var mail = 'my mail address'
var ss = SpreadsheetApp.openById('ID code sheet');

// first is the active sheet
var first = ss.getSheetByName("Sheet2");
first.activate();

var sheet = SpreadsheetApp.getActiveSheet();
var data = first.getDataRange().getValues();

// Generate content for body of email

var body = "",
  thisRow,
  column_1_Value,
  column_2_Value,
  column_3_Value,
  column_4_Value;

for (var x = 0; x <data.length; x++) {
thisRow = data[x];
column_1_Value = thisRow[0];
column_2_Value = thisRow[1];
column_3_Value = thisRow[2];
column_4_Value = thisRow[3];

column_2_Value = Utilities.formatDate(new Date(column_2_Value), "GMT", "MMMMM dd");

body = **body** + column_1_Value + " * " +
       column_2_Value + " * " + 
       column_3_Value + " (" +
       column_4_Value + ")" + "\n"

}

MailApp.sendEmail("mail address to receive mail", "upcoming events", "Upcoming events" +"\n" +"\n" + body + "\n" + "That's all for next week")


}

1 个答案:

答案 0 :(得分:0)

您可以使用Utilities.formatDate()方法格式化日期。您可以使用JavaScript字符串方法来更改大小写。这是一个例子,它可能不是一个完整的解决方案,但希望它能说明如何实现您的需求:

function test(){
  var body = "",
      allRowsData = "",
      thisRow,
      column_1_Value,
      column_2_Value,
      column_3_Value,
      column_4_Value;

  for (var x = 0; x <data.length; x++) {
    thisRow = data[x];
    column_1_Value = thisRow[0];
    column_2_Value = thisRow[1];
    column_3_Value = thisRow[2];
    column_4_Value = thisRow[3];

    column_1_Value = column_1_Value.slice(0,1) + column_1_Value.slice(1).toLowerCase();;//Change to Upper and lower case
    column_2_Value = Utilities.formatDate(new Date(column_2_Value), timeZone, "MMM dd");

    body = "";//Reset on every loop
    body = column_1_Value + " * " +
           column_2_Value + " * " + 
           column_3_Value + " * " +
           column_4_Value + " * " +
           "\n" + "/n" + "That's all for next week";

    allRowsData = allRowsData + body;
  };

};