見出し画像

【GASで簡単自動化】社員別にファイルを複製する方法

こんにちは、スーパーソフトウェア東京オフィス技術部の金子です。
GAS (Google Apps Script)  を使用して、社員別に別名のファイルを自動で複製する方法を共有します。
今回紹介する例では、ファイルを「勤務表_社員名_YYYYMM」というファイル名で複製します。

自動化させる作業の概要

今までは下記のような手順で勤務表を作成していました。
下記の作業をGASで自動化させます。

①勤務表テンプレートのスプレッドシートを各社員がコピー。
②コピーしたファイルを特定のフォルダーに移動させる。
    例)2024年7月の勤務表であれば2024/07というフォルダーに移動。
③ファイル名に自分の名前と年月を追加する。
    例)ファイル名:「勤務表_田中_YYYYMM」

自動化の手順

  1. ドライブの適当なフォルダーにスクリプト実行用スプレッドシートとコピーしたいファイルを作成する。

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で

いいなと思ったら応援しよう!