私は自分のコンピュータからレポートを実行すると、4つのcsvファイルを含むフォルダを自動的に作成するソフトウェアを持っています。私はレポートを実行するたびに、私は4つの新しいファイルを持つ新しいフォルダを取得します。これらのフォルダとファイルは、GDriveの自分のフォルダの1つと自動的に同期します。私は4つのスプレッドシートを取って、ファイルがアップロードされた後、同じフォルダ内の1つの新しいシートにそれらを組み合わせるために、次のスクリプトを設定しました。私は時間ベースのイベントで実行するようにスクリプトを設定する予定で、すべてのサブフォルダを繰り返し実行し、ファイルを1つのファイルに結合します。フォルダ内のファイル数をカウントして新しいファイルを作成しないようにする方法
私は、そのフォルダをスキップするフォルダに対して既にファイルが生成されているかどうかを確認する方法を理解しようとしています。私は次のコードを持っていますが、動作していないし、複数のファイルがまだ生成されています。私の最初の考えは、フォルダにあるファイルの基本的な数を数え、その数より大きい場合はスクリプトを実行しないでください。私はif文のコードに誤りがあると信じています。
/* Head Master Info >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
/* Top Level Google Drive Folder ID (not absolute root, just the top of the directory
you want to work from)*/
var TopDriveFolderID = "0B2rN5b8fW77ldXZXOXFLZGlSamc";
var BaseNumberOfFilesInFolder = 5;
/* End Head Master Info >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
/* Body >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
/* Functions to iterate through all sub folders */
function listFolders() {
var parentFolder = DriveApp.getFolderById(TopDriveFolderID);
var childFolders = parentFolder.getFolders();
var cnt = 0;
while(childFolders.hasNext()) {
var child = childFolders.next();
// Logger.log(child.getName() + " |Drive_ID: " + child.getId());
var newSpreadSheetChildId = child.getId();
// **the newSpreadSheetChildId Variable is also the folder ID,
// hence they are used interchangeably **
/* SpreadSheet Combiner >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>*/
/* Name of combined Spreadsheet*/
var newSpreadSheetName = DriveApp.getFolderById(newSpreadSheetChildId).getName();
/* Name of Folder to be looked up*/
// var masterFolder = "reports";
/* Retrieve the desired folder */
//var myFolder = DriveApp.getFoldersByName(masterFolder).next();
var myFolder = DriveApp.getFolders().next();
/* Get all spreadsheets that resided on that folder */
var spreadSheets = myFolder
.getFilesByType("application/vnd.google-apps.spreadsheet");
var spreadSheetName = myFolder.getName();
// Logger.log(spreadSheetName);
/* Create the new spreadsheet that you store other sheets */
var newSpreadSheet = SpreadsheetApp.create(newSpreadSheetName);
/* Iterate over the spreadsheets over the folder */
while(spreadSheets.hasNext()) {
cnt++;
Logger.log(cnt + "early");
var sheet = spreadSheets.next();
/* Open the spreadsheet */
var spreadSheet = SpreadsheetApp.openById(sheet.getId());
if (cnt > BaseNumberOfFilesInFolder) {
/* Get all its sheets */
for(var y in spreadSheet.getSheets()) {
Logger.log(cnt + "late");
/* Copy the sheet to the new merged Spread Sheet */
spreadSheet.getSheets()[y].copyTo(newSpreadSheet);
/* In order to move the file to the folder we want, and because
google considers the SpreadSheet a Google Spreadsheet
instead of a file, we have to convert the SpreadSheet to a file in
order to move it. Thats what the next 2 lines of code do.*/
var getNewSSid = newSpreadSheet.getId();
var SStoGFile = DriveApp.getFileById(getNewSSid);
/* Actually moving the file*/
DriveApp.getFolderById(newSpreadSheetChildId).addFile(SStoGFile);
/* Deleting the duplicate file that's created in the process*/
var rootFolder = DriveApp.getRootFolder();
DriveApp.getRootFolder().removeFile(SStoGFile)
}
} else {
continue;
}
/* End SpreadSheet Combiner >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>*/
getSubFolders(child);
}
}
function getSubFolders(parent) {
parent = parent.getId();
var childFolder = DriveApp.getFolderById(parent).getFolders();
while(childFolder.hasNext()) {
var child = childFolder.next();
Logger.log(child.getName());
getSubFolders(child);
}
return;
}
/* End iterate through Sub Folders */
}
私は読みやすくするために、水平スクロールバーを避けるために、いくつかの破断線を挿入しました。 Google Apps Scriptがここでは実行されないため、スナップショットされたJavascript/HTML/CSSも削除されました。 –