Как отправить электронное письмо в соответствии с датами электронной таблицы в скрипте Google Apps? - PullRequest
1 голос
/ 24 июня 2019

В папке Google Drive есть пять электронных таблиц, которые отправляют данные на одно письмо.

Пока что все данные из таблицы будут отправлены на электронную почту. Как отсортировать электронную таблицу по дате, чтобы отправлять только последние четыре данные электронной таблицы. Вот имена моих электронных таблиц: 1 декабря 2018 г. Рабочая тетрадь 2. Январь 2019 г. Рабочая тетрадь 3 февраля 2019 г. Рабочая тетрадь 4. Март 2019 г. Рабочая тетрадь 5. Апрель 2019 г. Рабочая тетрадь

function checkSalesss(){
  var file, files = 
 DriveApp.getFolderById("17Si9n3Uzf1yF6sGWaT2VygxLfPMnUgrE")
.getFilesByType(MimeType.GOOGLE_SHEETS)
  var body = ''; // Added
  var subject = []; // Added
  while (files.hasNext()) {
    file = files.next();
    var activeSpreadSheet = SpreadsheetApp.open(file);
    var sheets = activeSpreadSheet.getSheets();

    //loop through sheets to look for value
    for (var sheetIndex = 0; sheetIndex < sheets.length; sheetIndex++) {
      var sheet = sheets[sheetIndex];
      var data = sheet.getDataRange().getValues();
      var resultArr = [];

      //To Loop through the whole data Rows
      for (var i=1;i<data.length;i++) {

       //Takes columns from L to S (To loop through the Columns)
        for (var j=11;j<19;j++) {
          var cellVal = data[i][j];
          if (cellVal > 0) {
            resultArr.push([data[i][0],data[0][j],cellVal]);
          }
        }
      }
      if (resultArr.length>0) {
        var spreadsheetName = activeSpreadSheet.getName(); // Added
        subject.push(spreadsheetName); 
        body += "<br>" + "<b>"+ sheet.getName() + "(" + spreadsheetName + 
  ")" + "</b>" + "<br>"; 
        for (var m=0;m<resultArr.length;m++) {
          body+= "For Part No "+resultArr[m][0].toString()+" and Month 
"+resultArr[m][1].toString()+", Value is "+resultArr[m][2].toString()+" 
<br>";
        }
      }
    }
  }

  //send email
  if (subject.length > 0) {
    var s = "Alert " + " " + subject.join(",") + " " + " >6MO"; // Added
   MailApp.sendEmail({to: "abc@gmail.com",subject:"Alert", htmlBody: 
  body}); 
  }
}

Я хочу, чтобы данные электронной таблицы за январь 2019 г., февраль 2019 г., март 2019 г., апрель 2019 г. отправлялись на электронную почту

1 Ответ

1 голос
/ 24 июня 2019
  • Вы хотите отправить электронное письмо, выбрав электронную таблицу в зависимости от имени электронной таблицы.

Если мое понимание верно, как насчет этой модификации?

Точка модификации:

  • Чтобы выбрать электронную таблицу, создайте массив spreadsheetNames, включающий имя таблицы, которое вы хотите выбрать.
  • Электронная таблица выбирается с помощью массива.В этом случае я добавляю скрипт if (spreadsheetNames.some(function(e) {return e == spreadsheetName})) {}.

Модифицированный скрипт:

function checkSales(){
  var spreadsheetNames = [ //  Added
    // "Dec 2018 Workbook", // This was commented out. So the following 4 Spreadsheets are used for creating the data.
    "Jan 2019 Workbook",
    "Feb 2019 Workbook",
    "March 2019 Workbook",
    "April 2019 Workbook"
  ];

  var file, files = DriveApp.getFolderById("17Si9n3Uzf1yF6sGWaT2VygxLfPMnUgrE").getFilesByType(MimeType.GOOGLE_SHEETS);
  var body = '';
  var subject = [];
  while (files.hasNext()) {
    file = files.next();
    var activeSpreadSheet = SpreadsheetApp.open(file);
    var spreadsheetName = activeSpreadSheet.getName(); // Added
    if (spreadsheetNames.some(function(e) {return e == spreadsheetName})) { // Added
      var sheets = activeSpreadSheet.getSheets();
      for (var sheetIndex = 0; sheetIndex < sheets.length; sheetIndex++) {
        var sheet = sheets[sheetIndex];
        var data = sheet.getDataRange().getValues();
        var resultArr = [];
        for (var i=1;i<data.length;i++) {
          for (var j=11;j<19;j++) {
            var cellVal = data[i][j];
            if (cellVal > 0) {
              resultArr.push([data[i][0],data[0][j],cellVal]);
            }
          }
        }
        if (resultArr.length>0) {
  //        var spreadsheetName = activeSpreadSheet.getName(); // removed
          subject.push(spreadsheetName); 
          body += "<br>" + "<b>"+ sheet.getName() + "(" + spreadsheetName + ")" + "</b>" + "<br>"; 
          for (var m=0;m<resultArr.length;m++) {
            body+= "For Part No "+resultArr[m][0].toString()+" and Month "+resultArr[m][1].toString()+", Value is "+resultArr[m][2].toString()+" <br>";
          }
        }
      }
    }
  }
  if (subject.length > 0) {
    var s = "Alert " + " " + subject.join(",") + " " + " >6MO"; // Added
    MailApp.sendEmail({to: "abc@gmail.com",subject:"Alert", htmlBody: body}); 
  }
}

Примечание:

  • О last four spreadsheet data,Я подумал, что это могут быть «Рабочая тетрадь за январь 2019 года», «Рабочая тетрадь за февраль 2019 года», «Рабочая тетрадь за март 2019 года», «Рабочая тетрадь за апрель 2019 года».Если вы хотите изменить их, измените массив spreadsheetNames приведенного выше сценария.

Ссылка:

Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...