Help us understand the problem. What is going on with this article?

[GAS]GoogleAppsScriptで報告資料の定期自動複製

More than 1 year has passed since last update.

お客さんに報告する資料を定期的に作ったりするの大変ですよね。
毎週「先週の資料をコピーして、日付フォルダ作って、リネームして移動」みたいな運用をしている週報の作成を自動化した + 毎回リンクをお知らせする手間がのこるので、作成したファイルへのリンクをslackに通知してもらうようにした時のメモです。

コード

function makeFolder() {
  Logger.log("週報作っちゃうぞ!");
  var success = false;
  // 「週報」フォルダ
  var rootFolder = DriveApp.getFolderById("your drive");
  // 「週報」配下のフォルダ
  var folders = rootFolder.getFolders();

  while (folders.hasNext()) {
    var folder = folders.next();
    var folderDateNum = Number(folder.getName());
    var todayNum = Number(Utilities. formatDate(new Date(), "Asia/Tokyo", "yyyyMMdd"));   
    // 今日の分か未来分まで作成済み
    if ((todayNum-folderDateNum) <= 0) {
        Logger.log("作成済みです");
      break;
    } 

    // ここに来るってことは、まだ今週分は作成していないはず。
    var todayFolder = rootFolder.createFolder(todayNum);
    // 先週のフォルダ内にあるファイル全部取得
    var files = folder.getFiles();
    // ファイルを取得
    while (files.hasNext()) {
      var file = files.next();
      // 週報以外をスキップ
      if (file.getName() == "進捗報告_" + folderDateNum) {
        break;
      }
    }

    // 今週分作成
    var todayFile = file.makeCopy("進捗報告_" + todayNum);
    todayFolder.addFile(todayFile);
    success = true;
    // 消さないとコピーが残っちゃうので削除
    folder.removeFile(todayFile);
    break;
  }
  // slackに通知
  postMessage(success, todayFile.getUrl());
  Logger.log("作成終了");
}

// Slackに通知
function postMessage(success, url) {
  var token = "your token"; // slackトークン
  var channel = "shuhou"; //投稿先チャンネル名
  var username = "週報bot"; //BOTの名前
  var text =  "週報の作成に失敗しちゃいました。ごめんなさい。今日は自分でコピーしてね!";

  if (success) {
    text = "週報ができたよ。" + url;
  }

  UrlFetchApp.fetch("https://slack.com/api/chat.postMessage?token=" + token + "&channel=%23" + channel + "&username=" + username + "&text=" + text);
}

感想

  • 初めてGAS触りましたが、javascriptライクで直感的に操作できて、やりやすかった。
  • 通知メッセージとかはもうちょっと考えたほうがよさそうですが、とりあえずこれで運用できてるので、いまはこのままにしてます。
  • @here通知ってこれでできるのでしょうか?

参考

先人の知恵に感謝:pray:
Google Apps Scriptを使って定期実行するcronを作る
GoogleAppsScript Reference
Google Apps Scriptを用いてライブラリを使わずにSlackにGoogleサイトの変更通知を投稿する

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away