【GASで簡単自動化】社員別にファイルを複製する方法
こんにちは、スーパーソフトウェア東京オフィス技術部の金子です。
GAS (Google Apps Script) を使用して、社員別に別名のファイルを自動で複製する方法を共有します。
今回紹介する例では、ファイルを「勤務表_社員名_YYYYMM」というファイル名で複製します。
自動化させる作業の概要
今までは下記のような手順で勤務表を作成していました。
下記の作業をGASで自動化させます。
自動化の手順
ドライブの適当なフォルダーにスクリプト実行用スプレッドシートとコピーしたいファイルを作成する。
2. スクリプト実行用のスプレッドシートのシートを以下の画像のように作成する。
・A~C列にファイル名につけたい文字を指定する(「年」と「月」はフォ
ルダー名にも使用します)。
・D列にコピーしたいファイル名を指定する。
・メニューの挿入の図形描画で図形を作成する。後に、この図形にスク
リプトを割り当て、ボタンとして利用します。
3. メニューの拡張機能でApps Scriptを開き、下記のコードを貼り付ける。
function handleClickButton() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getActiveSheet();
// 現在のフォルダーID
// フォルダーのURLのパス「folders/{folderId}」の右の部分の文字列がフォルダーのIDとなっている。
const currentFolderId = DriveApp.getFolderById("hogehogehoge");
// 現在のファルダーにフォルダーを作成
const newFolder = createFolder(sheet, currentFolderId);
// 作成したフォルダーにファイルを複製する
createFiles(sheet, currentFolderId, newFolder);
}
// フォルダーを作成する
function createFolder(sheet, currentFolderId) {
const year = getYear(sheet);
const month = getMonth(sheet);
// 作成するフォルダー名を指定する
const folderName = year + '/' + month;
return currentFolderId.createFolder(folderName);
}
// ファイルを作成する
function createFiles(sheet, currentFolderId, newFolder) {
// コピーしたいファイルを取得する
const sourceFileName = sheet.getRange('D2').getValue();
const sourceFile = currentFolderId.getFilesByName(sourceFileName).next();
// ファイル名に使用する値を取得する
const memberNames = getMemberNames(sheet);
const year = getYear(sheet);
const month = getMonth(sheet);
for (const name of memberNames) {
// 作成する ファイル名を指定する
const newFileName = '' + name + '_' + year + month;
sourceFile.makeCopy(newFileName, newFolder);
}
}
// 社員名を取得する
function getMemberNames(sheet) {
const startRow = 2; // 2行目から読み取る
const column = 1; // A列なので1列目
const lastRow = sheet.getLastRow();
const range = sheet.getRange(startRow, column, lastRow - startRow + 1);
const values = range.getValues();
const memberNames = values.map(value => value[0]);
return memberNames;
}
// 年を取得する
function getYear(sheet) {
return sheet.getRange('B2').getValue();
}
// 月を取得する
function getMonth(sheet) {
const monthNumber = Number(sheet.getRange('C2').getValue());
if (monthNumber >= 1 && monthNumber <= 9) {
return '0' + monthNumber;
}
return monthNumber.toString();
}
4. スクリプト実行用のボタンを作成する。
・「ファイルを複製する」の図形の3点ドットをクリック。
・「スクリプトを割り当て」をクリック。
・「handleClickButton」と入力して「確定」ボタンをクリック。
5. 「ファイルを複製する」のボタンをクリックするとスクリプトが実行さ れ、ファイルが複製される。
実行結果
参考URL
▼採用情報
▼新卒情報はWantedlyで