我在google drive里有一些google表格。我只想在google drive中将最近四个月的文件发送到电子邮件中。问题是月份是在文件名中定义的。所以没有时间戳
到目前为止,我正在搜索标题包含"Mar 2019“或标题包含"Apr 2019”的文件。如果是这样的话,在向google驱动器添加文件后,我必须每月更改代码。
function checkSales(){
var file, files = DriveApp.getFolderById("").searchFiles('title
contains "Mar 2019" or title contains "Apr 2019" or title contains "May
2019" or title contains "Jun 2019"')
var body = '';
var subject = [];
while (files.hasNext()) {
file = files.next();
var activeSpreadSheet = SpreadsheetApp.open(file);
var spreadsheetName = activeSpreadSheet.getName(); // 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]);
}
}
}
}
}
我希望输出将google驱动器中的最后四个文件发送到电子邮件。
发布于 2019-07-05 02:55:49
'title contains "Mar 2019" or title contains "Apr 2019" or title contains "May 2019" or title contains "Jun 2019"'
如果我的理解是正确的,那么这个修改如何?请把这看作是几个答案中的一个。
修改点:
首先,请检查我准备的上述对象的值。如果有修改值,请修改。如果包含错误的值,则无法检索文件。请注意这一点。
修改后的脚本:
请按如下方式修改。
发自:
var file, files = DriveApp.getFolderById("").searchFiles('title contains "Mar 2019" or title contains "Apr 2019" or title contains "May 2019" or title contains "Jun 2019"')
至:
var months = {0: "Jan", 1: "Feb", 2: "Mar", 3: "Apr", 4: "May", 5: "Jun", 6: "Jul", 7: "Aug", 8: "Sep", 9: "Oct", 10: "Nov", 11: "Dec"};
var date = new Date();
var y = date.getFullYear();
var m = date.getMonth();
var fileNames = [];
for (var i = 0; i < 4; i++) {
m--; // For example, when today is July, you need June, May, Apr and Mar.
if (m < 0) {
m += 12;
y--;
}
fileNames.push(months[m] + " " + y);
// m--; // For example, when today is July, you need July, June, May and Apr.
}
var searchQuery = fileNames.map(function(e) {return 'title contains "' + e + '"'}).join(" or ");
var file, files = DriveApp.getFolderById("root").searchFiles(searchQuery);
注意:
var spreadsheetNames = DriveApp.searchFiles(
的意思。我认为当你的脚本被保存时,会发生一个错误。Tedinoz's comment.也提到了
在此示例脚本中,当今天是7月、6月、5月、4月和3月时,将检索
m--;
。参考文献:
如果我误解了你的问题,这不是你想要的方向,我道歉。
发布于 2019-07-05 03:03:07
试试这个:
function getLastFourMonthFileIds(){
var nA=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Nov','Dec'];
var mA=[];
for(var i=0;i<4;i++) {
var dt=new Date(new Date().getFullYear(),new Date().getMonth()-i,new Date().getDate());
mA.push(nA[dt.getMonth()]+dt.getFullYear());
}
var fA=[];
var files = DriveApp.getFolderById("").getFilesByType(MimeType.GOOGLE_SHEETS);
while(files.hasNext()) {
var file=files.next();
if(mA.indexOf(file.getName())>-1) {
fA.push(file.getId());
}
}
Logger.log(fA);
return fA();
}
发布于 2019-07-05 05:08:33
使用getLastUpdated()
属性的代码示例。
function so5689562902() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetname = "56895629";
var sheet = ss.getSheetByName(sheetname);
sheet.activate;
// sundry variables
var filearray = [];
var filedetail = [];
var emailarray = [];
var emailattachments = [];
var numberReq = 4;
// get the files from the folder
var folder = DriveApp.getFolderById("<<insert Folder ID>>");
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
filedetail=[];
//Logger.log("DEBUG: file name: "+file.getName()+", file ID: "+file.getId()+", last updated: "+file.getLastUpdated());
filedetail.push(file.getName());
filedetail.push(file.getId());
filedetail.push(file.getLastUpdated());
// build cumulative array
filearray.push(filedetail);
}
// sort the array by date updated
filearray.sort(function(x,y){
var xp = x[2];
var yp = y[2];
return xp == yp ? 0 : xp > yp ? -1 : 1;
});
// get just the first N files
for (i=0;i<numberReq;i++){
filedetail=[];
filedetail.push(filearray[i][0] ); // name
filedetail.push(filearray[i][1] ); // file ID
filedetail.push(filearray[i][2] ); // last updated
// build the array of email files
emailarray.push(filedetail);
emailattachments.push(filearray[i][1])
}
// display the details for proof
//var arraylen = emailarray.length;
//Logger.log("DEBUG: the array length = "+arraylen);
//var targetrange = sheet.getRange(2,1,arraylen, 3);
//Logger.log("DEBUG: the target range = "+targetrange.getA1Notation());
//targetrange.setValues(emailarray);
// sample sendEmail.
// email attachments are included in the options
//GmailApp.sendEmail(<<recipient>>, <<Subject>>,nonhtmlmessage, {from:senderemail,htmlBody: htmlmessage,name: senderName,replyTo:senderemail ,attachments: emailattachments });
}
https://stackoverflow.com/questions/56895629
复制