如何在Google电子表格上收集所有数据,然后在运行脚本后将其清除



我正在创建一个脚本,该脚本将抓住所有未读电子邮件,将这些电子邮件的尸体移动到Google电子表格中,将所有这些数据通过Webhook将所有这些数据推到Slack,然后清除床单。

脚本的第一部分抓住未读电子邮件并将其放入适当的单元格中的工作正常。推动数据通过的部分不起作用。我将其设置为循环,以确保它抓住所有数据,但它不起作用。我试图使其不显示为数组,但这似乎也不起作用。

var SEARCH_QUERY = "label:inbox is:unread to:me";
function getEmails_(q) {
    var emails = [];
    var threads = GmailApp.search(q);
    for (var i in threads) {
        var msgs = threads[i].getMessages();
        for (var j in msgs) {
            emails.push([msgs[j].getBody().replace(/<.*?>/g, 'n')
                .replace(/^s*n/gm, '').replace(/^s*/gm, '').replace(/s*n/gm, 'n')
            ]);
        }
    }
    return emails;
}
function appendData_(sheet, array2d) {
    sheet.getRange(sheet.getLastRow() + 1, 1, array2d.length, array2d[0].length).setValues(array2d);
}
function saveEmails() {
    var array2d = getEmails_(SEARCH_QUERY);
    if (array2d) {
        appendData_(SpreadsheetApp.getActiveSheet(), array2d);
    }
}
function postToSlack() {
    var url = "SLACK WEBHOOK URL HERE";
    var sheet = SpreadsheetApp.getActiveSheet();
     // This represents ALL the rows
    var range = sheet.getDataRange();
    var values = range.getValues();
    for (var i = 0; i < values.length; i++) {
    var row = [];
    for (var j = 0; j < values[i].length; j++) {
     if (values[i][j]) {
       row.push(values[i][j]);
     }
   }
   Logger.log(row);
    var str = values;
    var payload = {
        "text": str  
    }

    var post = {
        "method": "post",
        "payload": JSON.stringify(payload)
    };

    return UrlFetchApp.fetch(url, post);
}
}

我希望单元格中的数据将直接推向松弛,但什么也不会发生。当我运行它找到的行的日志时,它也没有撤消数据。

我弄清楚了!它想要一个tostring((命令。以下功能非常完美,除非它在最后没有清理纸张。只有在运行单独的功能时才清楚。

var SEARCH_QUERY = "label:inbox is:unread to:me";
var url = "SLACK WEBHOOK URL";
function getEmails_(q) 
{
    var emails = [];
    var threads = GmailApp.search(q);
    for (var i in threads) {
        var msgs = threads[i].getMessages();
        for (var j in msgs) 
        {
          emails.push([msgs[j].getPlainBody().replace(/<.*?>/g, 'n')
                .replace(/^s*n/gm, '').replace(/^s*/gm, '').replace(/s*n/gm, 'n')]);
            msgs[j].markRead();   
        }
    }
      return emails;
}
function appendData_(sheet, array2d) {
    sheet.getRange(sheet.getLastRow() + 1, 1, array2d.length, array2d[0].length).setValues(array2d);
}
function saveEmails() {
    var array2d = getEmails_(SEARCH_QUERY);
    if (array2d) {
        appendData_(SpreadsheetApp.getActiveSheet(), array2d);
}
    var sheet = SpreadsheetApp.getActiveSheet();
    var range = sheet.getDataRange();
    var values = range.getValues();
    var row = [];
    for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
     if (values[i][j]) {
       row.push(values[i][j]);
     }
    }
   }
   Logger.log(row);
    var str = values.toString();
    var payload = {
        "text": str  
    }

//    var post = {
//        "method": "post",
//        "payload": JSON.stringify(payload)
//      
//    };

//    return UrlFetchApp.fetch(url, post); 


function clear() {
  var app = SpreadsheetApp;
  var sheet = app.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("A1:A40").clearContent();}


  }

编辑:在添加的答案中,您可以删除clear()并在Logger.log(row);下方添加sheet.getRange("A1:A40").clearContent();。另一种方法是,您也可以从saveEmails()中取出clear()并这样呼叫,

function saveEmails() {
var array2d = getEmails_(SEARCH_QUERY);
if (array2d) {
    appendData_(SpreadsheetApp.getActiveSheet(), array2d);
}
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getDataRange();
var values = range.getValues();
var row = [];
for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
        if (values[i][j]) {
            row.push(values[i][j]);
        }
    }
}
Logger.log(row);
var str = values.toString();
var payload = {
    "text": str
}
clear();
//    var post = {
//        "method": "post",
//        "payload": JSON.stringify(payload)
//      
//    };

//    return UrlFetchApp.fetch(url, post); 
}
function clear() {
    var app = SpreadsheetApp;
    var sheet = app.getActiveSpreadsheet().getActiveSheet();
    sheet.getRange("A1:A40").clearContent();
}

最新更新