1
8

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 5 years have passed since last update.

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

Last updated at Posted at 2017-02-25

お客さんに報告する資料を定期的に作ったりするの大変ですよね。
毎週「先週の資料をコピーして、日付フォルダ作って、リネームして移動」みたいな運用をしている週報の作成を自動化した + 毎回リンクをお知らせする手間がのこるので、作成したファイルへのリンクを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サイトの変更通知を投稿する

1
8
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
1
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?