Google apps script 如何在一封电子邮件中发送多张工作表范围数据google应用程序脚本?
Google Drive文件夹中有两个电子表格。如何在一封电子邮件中发送多张工作表中的数据 到目前为止,当我执行脚本时,它将发送3封电子邮件,因为它包含两个工作簿中的3张工作表。一个工作簿包含两张工作表。我想把这两张纸放在一封电子邮件里。现在它正在发送两封独立的电子邮件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()
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"});
}
};