【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
}
マガジン
この記事が気に入ったらサポートをしてみませんか?