从gmail提取数据并传递到Google工作表

时间:2019-11-17 16:00:48

标签: google-apps-script google-sheets scripting gmail

我有用于从Gmail提取数据并将其传递给Google工作表的代码。

请找到代码。

enter image description here

对我来说,问题是,整个数据仅被复制到第一行。

Gmail message:

UserName    ID
XXX         23
YYY         45

我在Google工作表中得到的是: 第一行(A1)本身中的所有3 * 4表格式内容。

我需要将此信息附加在单独的单元格中,而不是在单个单元格中。

2 个答案:

答案 0 :(得分:1)

您没有指定要进入的单元格,因此将以下代码始终附加到单元格A1中(极其低效)。

function addToDo() {

    var label = GmailApp.getUserLabelByName("Samples");
    var threads = label.getThreads();
    var sheet = SpreadsheetApp.getActiveSheet();
    var body = [];

    for(var i=0;i<threads.length; i++){
         body[body.length] = [threads[i].getMessages()[0].getPlainBody()]; //add to array in google app scripts
    }

    sheet.getRange(1,1,body.length,1).setValues(body); //dump array all at once to google sheets
}

请阅读此资源,因为它可以帮助您避免在与Google表格相关的GAS(Google应用程序脚本)代码中犯下更严重的错误。第一个不好的例子正是您要尝试做的。

https://developers.google.com/apps-script/guides/support/best-practices

答案 1 :(得分:1)

您的代码存在以下问题:它会将单个对象作为单元插入,并且效率低下。

您应该获取所有数据并立即进行设置。这使Google可以执行更高效的批量操作。

此外,如果要在多列中插入数据,则需要将其分开并将每列作为一个对象放置(在我的示例中为data)。

function myFunction() {
  var label = GmailApp.getUserLabels()[0];
  var threads = label.getThreads();
  var sheet = SpreadsheetApp.getActiveSheet();

  var data = [];

  for (var i=0; i<threads.length; i++) {
    var threadId = threads[i].getId();
    var firstmessage = threads[i].getMessages()[0];
    var subject = firstmessage.getSubject();
    var body = firstmessage.getPlainBody();
    data.push([threadId, subject, body]); //Change this to have the columns you want
  }

  sheet.getRange(sheet.getDataRange().getLastRow(), 1, data.length, data[0].length).setValues(data);

}