3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[GAS] 毎週ファイルをコピーするスクリプト

Last updated at Posted at 2021-12-31

サンプルシナリオ

金曜日に公開予定のスライドがある。
毎週 資料-2022-01-07 という名前でスライドを用意する。
毎週月曜日に先週のスライド (例: 資料-2022-01-07) をコピーして次の金曜日の新しいスライド (例: 資料-2022-01-14) を作成する。

方法

  1. 資料-2022-01-07 を用意する。
  2. ファイルコピースクリプトを作成する。
  3. コードをコピーする。
  4. トリガーを作成する。

資料-2022-01-07 を用意する。

最初のコピー元のファイルです。例は Google スライドですが、ほかファイルでも可能です。

ファイルコピースクリプトを作成する。

ドライブの画面で新規作成を選択します。

image.png

「その他」->「Google Apps Script」を選択します。

image.png

以下のようなコード編集画面になります。

image.png

コードをコピーする。


function main()
{
  const FolderId = "[対象のファイルがある Google ドライブのフォルダ ID]";
  const SlideNameTemplate = "資料-%s";
  const FRIDAY = 5;
  // 次の資料名の日付
  const nextDate = getNextDayDate(FRIDAY);
  const nextDateString = Utilities.formatDate(nextDate, "Asia/Tokyo", "yyyy-MM-dd");
  // 前の資料名の日付
  const prevDate = new Date(nextDate)
  prevDate.setDate(prevDate.getDate() - 7);
  const prevDateString = Utilities.formatDate(prevDate, "Asia/Tokyo", "yyyy-MM-dd");

  const nextFileName = Utilities.formatString(SlideNameTemplate, nextDateString);
  const prevFileName = Utilities.formatString(SlideNameTemplate, prevDateString);

  let folder = DriveApp.getFolderById(FolderId);

  // 作成する予定のファイルがすでに存在するなら終了する。
  while (folder.getFilesByName(nextFileName).hasNext())
  {
    return;
  }

  let files = folder.getFilesByName(prevFileName);

  // コピー元のファイルが存在したら、コピーする。
  while (files.hasNext())
  {
    let prevFile = files.next();
    // コピー後のファイル名を指定する。
    prevFile.makeCopy(nextFileName);
    return;
  }
}

// 次の dayOfWeek (日:0 〜土: 6)曜日の日付を取得する。
function getNextDayDate(dayOfWeek)
{
  let nextDate = new Date();
  let days = dayOfWeek - nextDate.getDay()
  days = days <= 0 ? days + 7 : days;
  nextDate.setDate(nextDate.getDate() + days);
  return nextDate;
}

曜日指定

main 部分
  const FRIDAY = 5;
  const nextDate = getNextDayDate(FRIDAY);
...

// 次の dayOfWeek (日:0 〜土: 6)曜日の日付を取得する。
function getNextDayDate(dayOfWeek)

main 部分の FRIDAY は金曜日を表す数値を指定しています。プログラミング上、曜日を数値で表すことがあります。
getNextDayDate のコメントの通り曜日を表す数値は、日曜日は0,月曜日は1,というように進むごとに値が1ずつ増えていき、土曜日は6になります。

別の曜日にしたいときは FRIDAY 部分を変更します。

フォルダID

  const FolderId = "[対象のファイルがある Google ドライブのフォルダ ID]";

フォルダIDとは、Googleドライブ上でのフォルダのIDです。URL から確認できます。
URLの folders/ 以降の文字列です。もしクエリ文字列(?以降のURLパラメータ)がついていたらそれは含めません。

例: https://drive.google.com/drive/folders/[フォルダ ID]

トリガーを追加する。

トリガーとは、自動で実行する仕組みです。
今回は月曜日のお昼に自動で実行してほしいです。
Apps Script の画面で設定できます。

左の時計アイコンのトリガーを選択します。

image.png

「トリガーを追加」をクリックします。

image.png

以下のように指定します。
イベントのソースとは、どんな条件で自動実行するかの指定方法です。
今回の目的だと時間主導型の「週ベースのタイマー」で毎週を指定できます。

image.png

時刻は1時間の幅で指定できます。分単位まで指定したい場合、以下の記事を参考します。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?