DXプログラミング入門 ~紙を疑え プログラミング編
紙を疑え プログラミング編
前回の準備編でリモートワークの妨げになる手渡し紙媒体は何となく駆逐できそうな雰囲気がしてきました。今回はGoogle Apps Scriptのプログラミング例を見ながらなるべく自動化していきます。
前提条件を考える
・各社員の配布先フォルダはフォルダ名が社員の氏名で明細配布用フォルダに全員分入っている(もしくは社員番号)
・給与計算ソフトから出力される各社員の明細のファイル名には各社員の氏名が含まれている(そして半角スペースなども含めフォルダ名と完全一致。社員番号の場合は全桁まで記載)
・給与計算ソフトから出力される各社員の明細は一つのフォルダにまとめられている
詳細仕様を考える
①プログラムで明細配布フォルダ内の全フォルダを把握
②フォルダ名と明細書に含まれているはずの氏名があるかないかをチェック
③フォルダ名と明細書に含まれている氏名が合致すれば該当フォルダに明細書をコピー
くらいのざっくり動きでとりあえず作っていこうと思います。
事前準備
フォルダIDの取得方法
Google Apps Scriptの作り方
ソースコード
//明細配布プログラム
function distributePayrollChecks() {
/* この下のbaseId とtargetId は編集する必要があります
該当フォルダのリンクコピーしたURLのID部分です(例の^で指定している部分
https://drive.google.com/drive/folders/1E4z1T_TxOAsa5anLRiyIvZX4cbdgU0xD?usp=share_link
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*/
const baseId = "環境で一度だけ書き換え"; //明細配布フォルダのID(環境で一度だけ書き換え)
const targetId = "明細書UPする毎に書き換え"; //配布したい明細書が入ったフォルダのID(明細書UPする毎に書き換え)
/* ここまで */
// baseFolderが明細配布フォルダのIDから明細配布フォルダに移動したイメージ
const baseFolder = DriveApp.getFolderById(baseId);
// 明細配布フォルダ内の各社員フォルダを取得
const folders = baseFolder.getFolders();
// targetFolderが明細書が入ったフォルダのIDから明細書が入ったフォルダに移動したイメージ
const targetFolder = DriveApp.getFolderById(targetId);
// ループ処理で取得した各社員フォルダを一つずつ見ていきます。まだ次のフォルダがあればループ処理継続
while (folders.hasNext()) {
// 次のフォルダ取得し一つ一つ処理していきます
let folder = folders.next();
// 取得したフォルダのフォルダ名を取得しfolderNameへ
let folderName = folder.getName();
// フォルダ名をログ出力してみます
console.log("folders: "+ folderName);
// 明細書が入ったフォルダの各社員明細ファイル達を取得
const files = targetFolder.getFiles();
// ループ処理の中で更に各社員の明細ファイル毎にループ処理します
while (files.hasNext()) {
// 次の明細書ファイル取得し一つ一つ処理していきます
let file = files.next();
let fileName = file.getName();
// 明細書ファイル名にフォルダ名が含まれていれば明細書ファイルを該当フォルダにコピー
if(fileName.includes(folderName)) {
file.makeCopy(fileName, folder);
console.log("### file copy! : "+ fileName);
}
}
}
}
コメントにもありますが必ずフォルダIDを書き換えて使用してください
サンプル配布
テスト用の社員3名とテスト用の給与明細が一つ入っていますので動作確認後は削除してください。
さいごに
今回はなるべく簡素にしていますがやろうと思えば明細書配布後にメールを飛ばすなどもできたりしますので色々いじって遊んでみてくださいね。
面倒になって毎度明細書ファイル一覧を取得してしまっているクソコードになっていますのでどなたかもっと素敵なコードにしてください。
この記事が気に入ったらサポートをしてみませんか?