見出し画像

【GAS】Google Apps Script 活用事例 CSVから学生名を取得してPDFファイルをリネームするスクリプト

採用イベントの下準備で、学生名簿一覧のPDFを分割してドライブに格納した後、CSVファイルの名簿を元に分割したファイルをリネームする自動化を実現しました。

ファイル分割にはPower Automate Desktopを利用

スクリプト全文はこちら

/**
 * フォルダの中からCSVファイルを探す 
 * 
 * 
 */
function getTargetFile() {
  const folder = DriveApp.getFolderById('*****************');
  const files  = folder.getFiles();

  console.log(`フォルダー名:${folder.getName()}`);

  while (files.hasNext()) {
    const file     = files.next();
    const fileId   = file.getId();
    const fileName = file.getName();

    console.log(`fileId:${fileId}, fileName: ${fileName}`);

    //CSVファイルから学生の名前を取得
    if(fileName.includes('csv')){
      const nameArray = generateFileName_(fileId);
      setNewfileName_(nameArray);
    }
  }
}


/**
 * 受け取った名前の配列の中から一致する学生を探して、ファイル名をリネームする
 * @param {Array.<string>} nameArray - 名前の配列
 * 
 */
function setNewfileName_(nameArray){
  const folder = DriveApp.getFolderById('*******************');
  const files  = folder.getFiles();

  console.log(`フォルダー名:${folder.getName()}`);

  while (files.hasNext()) {
    const file     = files.next();
    const fileName = file.getName();

    let number = 0;
    
    //ファイル名から数字のみを取り出す
    if(fileName.includes('(')){
      const replaced = fileName
      .replace('0903_応募者データ (','')
      .replace(').pdf','');
            
            //ファイル名: 学生A_01 -> nameArray[0];
      //ファイル名と配列の差分を調整する
      number = Number(replaced)-1;
      let result = nameArray[number];

      console.log(`${fileName} => 変換後:${number}`);
      console.log(`nameArray[${number}], ${result}`);
      
      if(result){
        file.setName(result);
      }
    }
  }
}


/**
 * CSVデータを取得してファイル名を生成する
 * 
 * @param  {Array.<string>} fileId - csvファイルのID
 * @return {Array.<Array.<string>>} No, 苗字, 名前の情報を含む2次元配列
 *
 */
function generateFileName_(fileId){
  const blob   = DriveApp.getFileById(fileId).getBlob();
  const csv    = blob.getDataAsString('Shift_JIS');
  const values = Utilities.parseCsv(csv);
  console.log(values);

  const header = values.shift();
  const column = {
    esNumber:  header.indexOf('No.'),
    lastName:  header.indexOf('氏名(姓)'),
    firstName: header.indexOf('氏名(名)'),
  }

  let array = [];
  let newFileName;
    
  ////苗字と名前を連結する
  values.map(row => {
    if(row[column.esNumber].length === 1){

            //01, 02, 03のように頭にゼロをつける
      let editNumber = ('0' + row[column.esNumber]).slice(-2);
      newFileName = '2022_0903_応募者データ_' + editNumber + '_' + row[column.lastName] + row[column.firstName];
      array.push(newFileName);
    }else{
      newFileName = '2022_0903_応募者データ_' + row[column.esNumber] + '_' + row[column.lastName] + row[column.firstName];
      array.push(newFileName);
    }
  });

  console.log(array);
  return array

}

マガジン


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