機能概要
このGoogle Apps Scriptの関数 createFilesFromTemplate()
は、テンプレートファイル(xls)を複製し、各社員ごとの情報に基づいて個別のファイルをGoogleドライブ上の指定されたフォルダに作成するスクリプトです。
※ 例えば勤怠を入力するファイルがあったら、それにファイル名を付けて複製するだけの機能です。
主な機能:
※テンプレートファイル(xls)は事前に作成しておく必要があります。
-
テンプレートファイルの取得:
- Googleドライブ上のテンプレートファイル(Excelファイル)をコピー元として使用します。
- テンプレートファイルのID(
fileId
)を指定してファイルを取得します。
-
社員ごとのファイル生成:
- 社員情報(会社名、氏名、メールアドレス)をリストとして保持し、社員ごとに異なるファイル名を生成します。メアドは現在は使ってないですが、権限付与が必要になったら使う予定
- 生成されるファイル名の形式は、
会社名_氏名.xls
です。
-
ファイルの複製と保存:
- テンプレートファイルを複製し、社員ごとのファイル名で指定されたフォルダに保存します。
- スクリプトでは
DriveApp
を使用して、コピー先のフォルダ(destinationFolderId
)を指定して保存します。
コピー元のファイルの修正
コピー元のファイルの中で日付とか直したい箇所があれば修正しておく。
gasでコード作成
何かスプレッドシート用意してgasを作ろう
拡張機能->apps script
function createFilesFromTemplate() {
// テンプレートファイルのID(GoogleドライブのURLから取得可能)
// https://docs.google.com/spreadsheets/d/1fX9yTm4bnpK8FBOREG_m6kz6cKd9mfl6/edit?gid=1381060538#gid=1381060538
var fileId = '1fX9yTm4bnpK8FBOREG_m6kz6cKd9mfl6'; // コピー元のファイルID
// コピー先のフォルダID(GoogleドライブのURLから取得可能)
// https://drive.google.com/drive/folders/1TueBj-LtKvcUE-jNpwDGXGzqY8SY4lQ5
var destinationFolderId = '1TueBj-LtKvcUE-jNpwDGXGzqY8SY4lQ5'; // コピー先のフォルダID
// 社員情報のリスト(会社名, 氏名, email)
var employees = [
{ companyName: '会社A', name: '山田太郎', email: 'taro.yamada@example.com' },
{ companyName: '会社B', name: '佐藤花子', email: 'hanako.sato@example.com' },
{ companyName: '会社C', name: '鈴木次郎', email: 'jiro.suzuki@example.com' },
// ここに他の社員情報を追加
];
// コピー先のフォルダを取得
var destinationFolder = DriveApp.getFolderById(destinationFolderId);
// 各社員ごとにファイルを作成
employees.forEach(function(employee) {
// ファイル名を生成
var newFileName = employee.companyName + "_" + employee.name + ".xls";
// テンプレートファイルをコピー
var copiedFile = DriveApp.getFileById(fileId).makeCopy(newFileName, destinationFolder);
// ログに結果を記録
Logger.log('ファイル作成完了: ' + newFileName);
});
}
実行
- 社員情報
employees
に変更があれば修正し、実行する。 - 実行すると、destinationFolderIdに指定したグーグルドライブ上にファイルが作成されているはずです。
TODO
コピーする際にファイルの中を加工しようと思ったがハードルが高かった。
扱っているのがxlsだが、ブラウザで開くとスプレッドシートに変換されている。xlsで修正を加えることができなかった。修正するにはgoogle drive apiが必要と出てきて、認証が面倒そうだったのでやめた。
xlsではなく、最初からスプレッドシートを使っているなら面倒なことはないのかもしれない