[英]How to sort last four files in a google drive folder via google-apps-script?
我在Google雲端硬盤中有一些Google表格。 我正在嘗試僅將最近四個月的Google驅動器中的文件發送到電子郵件。 問題是文件名中定義了月份。 因此沒有時間戳記
到目前為止,我正在按標題包含“ 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驅動器中的最后四個文件發送到電子郵件。
'title contains "Mar 2019" or title contains "Apr 2019" or title contains "May 2019" or title contains "Jun 2019"'
如果我的理解是正確的,那么該修改如何? 請認為這是幾個答案之一。
{0: "Jan", 1: "Feb", 2: "Mar", 3: "Apr", 4: "May", 5: "Jun", 6: "Jul", 7: "Aug", 8: "Sep", 9: "Oct", 10: "Nov", 11: "Dec"}
。 首先,請檢查我准備的上述JSON對象的值。 如果有修改值,請對其進行修改。 如果包含錯誤的值,則無法檢索文件。 請注意這一點。
請進行如下修改。
從: 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(
。我認為保存腳本時會發生錯誤。
m--;
修改注釋m--;
上面的腳本。 如果我誤解了您的問題,而這不是您想要的方向,我深表歉意。
嘗試這個:
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();
}
使用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 });
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.