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

В папке Google Диска есть две таблицы.Как я могу отправлять данные из нескольких электронных таблиц в одном письме

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

function checkSales(){
var file, files = DriveApp.getFolderById(
"1QoHyZrhSwqNYaOfgWu7X8WnY-wj9KMRU").getFilesByType(MimeType.GOOGLE_SHEETS)
while (files.hasNext()) {
file = files.next();
Logger.log(file)
var activeSpreadSheet = SpreadsheetApp.open(file);
var sheets = activeSpreadSheet.getSheets();
var body='';

//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=[];
var xTitle = 'Part Numbers'; // XAxis Title
var yTitle = 'Quantity'; // YAxis Title
var column = sheet.getRange("A1:A22");
column.setNumberFormat("@");

//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];
      Logger.log(cellVal)
      if(cellVal>0)
        {
          //Stores the Part No, Month Header Value of the Column, Cell 
          //Value which is greater then 0
         resultArr.push([data[i][0],data[0][j],cellVal])
        }
     }
   }
   if(resultArr.length>0)
    {
             var subject = "Alert " + " " + activeSpreadSheet.getName() 
           + " " + " >6MO";

            //Creates a body through the obtained values

            body += "<br>" + "<b>"+ sheet.getName() + "</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>"; // Modified
              }

      }
}

     //send email
    MailApp.sendEmail({to:"123@gmail.com",subject:subject, 
    htmlBody:body });
}

}

1 Ответ

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

Если мое понимание верно, как насчет этой модификации?Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Точки изменения:

  • Чтобы отправить несколько электронных таблиц в виде электронного письма с использованием вашего сценария, необходимо переместить MailApp.sendEmail()к внешней стороне цикла while.
  • Кроме того, необходимо переместить body.
  • Из вашего сценария subject имеет имя таблицы.Для этого subject перемещается за пределы цикла while.

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

function checkSales(){
  var file, files = DriveApp.getFolderById("1QoHyZrhSwqNYaOfgWu7X8WnY-wj9KMRU").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();
    for (var sheetIndex = 0; sheetIndex < sheets.length; sheetIndex++) {
      var sheet = sheets[sheetIndex];
      var data = sheet.getDataRange().getValues();
      var resultArr = [];
      var xTitle = 'Part Numbers'; // XAxis Title
      var yTitle = 'Quantity'; // YAxis Title
      var column = sheet.getRange("A1:A22");
      column.setNumberFormat("@");
      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(); // Added
        subject.push(spreadsheetName); // Modified
        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: "123@gmail.com", subject: s, htmlBody: body}); // Added
  }
}

Примечание:

  • ОТема письма и заголовок каждого листа, я готовлю их к вашей ситуации.Если вы хотите изменить их, пожалуйста, измените приведенный выше сценарий.

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

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