見出し画像

【GAS】Google Apps Script 活用事例 下位フォルダを含む連番フォルダの作成スクリプト

人事とか経理とかバックオフィス系で働いていると、11月度とか、12月度みたいな感じで月次ごとにフォルダを作成したいと思うシーンがあります。

さらに、11月度の中にデータ算出に使用した元データとか、計算に使ったスプレッドシートとか....そういうのを連番で管理出来たらいいなぁと思っていたので、検索して出てきたスクリプトに改良を加えて、こんなスクリプトを書きました。

スクリーンショット 2019-11-28 21.23.50

2019_01 というフォルダの下に、CSV,Document,PDF,Spreadsheetというフォルダが入っています。それが12月まで全て同じ構造になっています。

スクリーンショット 2019-11-28 21.34.05

新規のボタンをポチポチ押して1個1個作るのダルいので、そういうのはスクリプトで速攻片付けましょう。だって嫌じゃないですか、そんな退屈な仕事。

完成形のスクリプト 2021/2/22リライト

function swiftFolderCreate() {
 const folder = DriveApp.getFolderById('フォルダIDをここに入力する');
 console.log(folder.getName());

 //下位フォルダのタイトル
 const innerFolder = ['CSV','Document','SpreadSheet','PDF'];
 let arrayFolder   = [];

 //1月から12月
 for(let i = 1; i <= 12; i++){
   const month    = ('0' + i).slice(-2);
   const fileName = '2021_' + month; //年を入れる
   console.log(fileName);

   const parentFolder = folder.createFolder(fileName);

   for (let j = 0; j < innerFolder.length; j++){
     parentFolder.createFolder(innerFolder[j]);
   }//j
 }//i
}//end

var arrayFolder =[]; というのが、空白の配列です。for文の i で1月から12月までの連番フォルダを作成して空の配列に格納していきます。

[2019_01,2019_02,2019_03,.......]と続いていきます。そして、for文の j で下位フォルダを先ほど作成したフォルダの中に格納していきます。便利。これを一度知っていると今まで一個一個丁寧に作ってきた、あの時間は何だったんだろうみたいになります。

配列の''の中を文字列を好きなように変えれば、任意のフォルダが作れます。

2021/04/16 追記 シート上の情報 = フォルダ名となるようにフォルダを作成するスクリプト 

function createFolders() {
 const folder = DriveApp.getFolderById('****************');
 console.log(folder.getName());

 const nameArray = getNameArray_(); //['A. 'B', 'C'] 名前の配列を1次元配列で取得する

 for (let i = 0; i < nameArray.length; i++){
   const fileName     = nameArray[i];
   folder.createFolder(fileName);
 }
}//end



/**
* シートから名前の配列を作成し、フォルダを作成する。
* 
*/
function getNameArray_() {

 const url    = '********************';
 const sheet  = getSheetByUrl_(url);
 const values = sheet.getRange('A3:Z').getDisplayValues();

 const headerRow  = values[0];
 const column = {
   name:        headerRow.indexOf('応募者名'),
   university:  headerRow.indexOf('大学名'),
   isChecked:   headerRow.indexOf('本選考'),
 }

 console.log(sheet.getName());
 //console.log(values);

 let array = [];

 for(let i = 0; i < values.length; i++){
   if(!values[i][0]) continue
   if(values[i][column.university].includes('〇〇大学')){
     console.log(values[i][column.name]);
     array.push(values[i][column.name]);
   }
 }//for
 console.log(array);
 return array
}



/**
* URLからシートを取得する。
* 
*/
function getSheetByUrl_(url) {
 const spreadsheet = SpreadsheetApp.openByUrl(url);
 const sheets      = spreadsheet.getSheets();

 console.log(url.split('#gid='));

 //シートIDを、文字列から数値に変換する
 const sheetId = Number(url.split('#gid=')[1]);

 //前述のsheetIdが、型も含めて完全一致したときに、sheetをオブジェクトとして返す。
 for (const sheet of sheets) {
   if (sheetId === sheet.getSheetId()) return sheet;
 }//for
}//end

プログラミングはコンピュータを当たり前に使う現代人の生活を豊かにしてくれるものだと確信しています。やっぱいいですね。プログラミングって。

月次処理の負担を軽くするためのスクリプトをたくさん書いています。

スタッフ別フォルダを大量に生成するスクリプト

2020/03/28 追記

ローカルで一括作成する方法は、こちら

もりさんのデビュー本、辛口レビュー


この記事が気に入ったらサポートをしてみませんか?