Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何在一封电子邮件中发送多张工作表范围数据google应用程序脚本?_Google Apps Script_Google Sheets_Gmail - Fatal编程技术网

Google apps script 如何在一封电子邮件中发送多张工作表范围数据google应用程序脚本?

Google apps script 如何在一封电子邮件中发送多张工作表范围数据google应用程序脚本?,google-apps-script,google-sheets,gmail,Google Apps Script,Google Sheets,Gmail,Google Drive文件夹中有两个电子表格。如何在一封电子邮件中发送多张工作表中的数据 到目前为止,当我执行脚本时,它将发送3封电子邮件,因为它包含两个工作簿中的3张工作表。一个工作簿包含两张工作表。我想把这两张纸放在一封电子邮件里。现在它正在发送两封独立的电子邮件 function getAllSheets(){ var file, files = DriveApp.getFolderById("1JTtvZNc41D575Ubu3NbzVYTh9tX8KhGj").getFiles()

Google Drive文件夹中有两个电子表格。如何在一封电子邮件中发送多张工作表中的数据

到目前为止,当我执行脚本时,它将发送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"});
         }

       }
   }

 };
函数getAllSheets(){ 变量文件,文件= getFolderById(“1JTtvZNc41D575Ubu3NbzVYTh9tX8KhGj”).getFiles(); while(files.hasNext()){ file=files.next(); var activeSpreadSheet=SpreadsheetApp.open(文件); var sheets=activeSpreadSheet.getSheets(); //在表格中循环查找值 用于(表中的var i){ var表=表[i] var data=sheet.getDataRange().getValues(); var resultar=[]; var xTitle='零件号';//XAxis标题 var yTitle='Quantity';//YAxis Title //循环遍历整个数据行 对于(var i=1;i0) { var subject='超出范围警报'+''+sheet.getName(); //通过获取的值创建实体 变量体=“”;
for(var m=0;m您应该将邮件发送代码放在for语句之外,这样,邮件将在您查看工作簿的所有工作表之后发送

逻辑是

Function{
    Get files
    Through files{
        Get sheets
        Through sheets{
            Get Data
            Write data in body
        }
        Send mail with data
    }
}
它看起来像(未测试):

函数getAllSheets(){ 变量文件,文件= getFolderById(“1JTtvZNc41D575Ubu3NbzVYTh9tX8KhGj”).getFiles(); while(files.hasNext()){ file=files.next(); var activeSpreadSheet=SpreadsheetApp.open(文件); var sheets=activeSpreadSheet.getSheets(); 变量体=“”; //在表格中循环查找值 用于(表中的var i){ var表=表[i] var data=sheet.getDataRange().getValues(); var resultar=[]; var xTitle='零件号';//XAxis标题 var yTitle='Quantity';//YAxis Title //循环遍历整个数据行 对于(var i=1;i0){ var subject='超出范围警报'+''+sheet.getName(); //通过获取的值创建实体
对于(var m=0;m如果您想将两个表中的信息附加到“body”和“subject”,则必须在循环浏览表之前声明var body,并在循环之后发送电子邮件。这样,您将从两个表中收集信息,并将其分配给变量“body”和“subject”

然而,我测试了一个类似于Pierre-Marie Richard的代码,同时也解决了“主题”问题。为了可见性目的添加了完整的负载,最终结果如下:

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"});
   }
 };
函数getAllSheets(){ var file,files=DriveApp.getFolderById(“1JTtvZNc41D575Ubu3NbzVYTh9tX8KhGj”).getFiles(); while(files.hasNext()){ file=files.next(); var URL=file.getUrl() var parent=file.getParents() Logger.log(父级) var activeSpreadSheet=SpreadsheetApp.open(文件); var sheets=activeSpreadSheet.getSheets(); //定义主体和主题,然后再在图纸上循环,就像这两张图纸的信息都将附加到主体一样 变量体=“”; var subject='超出范围警报'; //在表格中循环查找值 用于(表中的var i){ var表=表[i] var data=sheet.getDataRange().getValues(); var resultar=[]; var xTitle='零件号';//XAxis标题 var yTitle='Quantity';//YAxis Title //循环遍历整个数据行 对于(var i=1;i0) { //在此处添加每页的主题 主题+=“+”范围超出了警报“+”+sheet.getName(); //通过获取的值创建实体
对于(var m=0;m@Sriram这是因为你在发送邮件之前不存储图表。你应该尝试将图表存储在一个数组中,并在你的邮件发送方法上循环以添加所有需要的图表。是的,我想我理解。非常感谢。嗨,我如何在一封邮件中发送多个电子表格数据?@Sriram你应该将数据放入一个数组中,然后一旦你退出了浏览文件的语句,就开始邮件部分
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"});
   }
 };