Как отправить данные диапазона нескольких листов в одном почтовом скрипте приложения Google? - PullRequest
2 голосов
/ 20 июня 2019

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

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

function getAllSheets(){
var file, files = 
DriveApp.getFolderById("1JTtvZNc41D575Ubu3NbzVYTh9tX8KhGj").getFiles();
while (files.hasNext()) {
file = files.next();
var activeSpreadSheet = SpreadsheetApp.open(file);
var sheets = activeSpreadSheet.getSheets();

//loop through sheets to look for value
for (var i in sheets) {


var sheet = sheets[i]
var data = sheet.getDataRange().getValues();

var resultArr=[];
var xTitle = 'Part Numbers'; // XAxis Title
var yTitle = 'Quantity'; // YAxis Title

//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 = 'Range exceeded Alert' + "" + sheet.getName();

      //Creates a body through the obtained values
       var body='';
       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

    MailApp.sendEmail({to:"foo@bar.com",subject:subject, 
    htmlBody:body 
    + " Chart! <br> <img src='cid:chartImg'> ! <br> Done"});
         }

       }
   }

 };

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Вы должны взять код отправки почты за пределами оператора for, чтобы почта отправлялась после того, как вы пройдете весь лист рабочей книги.

Логика будет

Function{
    Get files
    Through files{
        Get sheets
        Through sheets{
            Get Data
            Write data in body
        }
        Send mail with data
    }
}

Это будет выглядеть (не проверено):

function getAllSheets(){
    var file, files = 
    DriveApp.getFolderById("1JTtvZNc41D575Ubu3NbzVYTh9tX8KhGj").getFiles();
    while (files.hasNext()) {
        file = files.next();
        var activeSpreadSheet = SpreadsheetApp.open(file);
        var sheets = activeSpreadSheet.getSheets();
        var body='';
        //loop through sheets to look for value
        for (var i in sheets) {
            var sheet = sheets[i]
            var data = sheet.getDataRange().getValues();

            var resultArr=[];
            var xTitle = 'Part Numbers'; // XAxis Title
            var yTitle = 'Quantity'; // YAxis Title

            //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 = 'Range exceeded Alert' + "" + sheet.getName();

                //Creates a body through the obtained values

                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
        MailApp.sendEmail({to:"sriram6897@gmail.com",subject:subject, 
        htmlBody:body 
        + " Chart! <br> <img src='cid:chartImg'> ! <br> Done"});
    }
 };
1 голос
/ 20 июня 2019

Если вы хотите прикрепить информацию с обоих листов к «телу» и «теме», вы должны объявить var body ДО цикла по листам и отправить электронное письмо ПОСЛЕ цикла.Таким образом, вы соберете информацию с обоих листов и назначите ее для переменных «тело» и «субъект».

Я протестировал код, подобный Пьеру-Мари Ришар, однако, с проблемой «субъект»также.Добавление полной полезной нагрузки для наглядности здесь приводит к конечному результату:

function getAllSheets(){
var file, files = DriveApp.getFolderById("1JTtvZNc41D575Ubu3NbzVYTh9tX8KhGj").getFiles();
while (files.hasNext()) {
file = files.next();
var URL=file.getUrl()
var parent=file.getParents()
Logger.log(parent)  
var activeSpreadSheet = SpreadsheetApp.open(file);
var sheets = activeSpreadSheet.getSheets();


// define body and subject before looping though the sheets, like this information of both sheets will be attached to the body

 var body='';
  var subject = 'Range exceeded Alert';


//loop through sheets to look for value
for (var i in sheets) {

var sheet = sheets[i]
var data = sheet.getDataRange().getValues();

var resultArr=[];
var xTitle = 'Part Numbers'; // XAxis Title
var yTitle = 'Quantity'; // YAxis Title


//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)
    {
   // add the subject of each sheet here
      subject+= " "+'Range exceeded Alert' + "" + sheet.getName();
      //Creates a body through the obtained values
       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 after looping through the sheets, so that information of both sheets will be sent
      MailApp.sendEmail({to:"your email",subject:subject,            
    htmlBody:body 
    + " Chart! <br> <img src='cid:chartImg'> ! <br> Done"});
   }
 };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...