Google Apps Script(GAS)の導入事例。ファイル分割で作業効率化!

  • TAG

    GAS
  • UPDATE

    2023/01/16

1.はじめに

この前甥っ子とミニ四駆を一緒に作ったのですが、スイッチをONにしても走らない。

また、説明書を読み返す。あ!ここのパーツ入れてない、、

かれこれ1時間近く掛かりました。。子ども向けでも難しい(泣)

さて今回は以前取り上げさせて頂いたGoogle Apps Script(以下、GAS)に関しまして

導入事例をご紹介させて頂きます。ここから本題です!

GASの概要については別記事で紹介しているのでこちらをご覧ください

2.導入事例

下記のような社員名簿を手作業で店舗毎に分割する作業を行っており、2,3時間を要しておりました。

[作業内容]

 店舗毎にフィルタ ⇒ 対象店舗を抽出 ⇒ 新規ファイルとして保存 ⇒ 担当者へ通知

どうにか自動化できないかと相談を受け、GASでの対応を提案致しました。

実際に導入後のお話を伺ったところ、ボタン一つで処理が回るので手作業の時間が大幅に軽減された。

数百、数千店舗でも30分程度で処理が終わるので、大変助かっていますという意見を頂いております。

3.ファイル分割処理の作成

3-1.まずは分割したいリストを作成

スプレッドシートに店舗リストを記載します。下記スプレッドシートIDもソース上で使用します。

3-2.メイン処理の作成

店舗リストの内容をテーブル形式で格納して、対象の店舗毎にコピー処理を呼び出します。

コピー後にスプレッドシートURLを店舗リストに記載します。

function main(){
//店舗リストのスプレッドシートIDを定義 const storeSheetId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //社員名簿のスプレッドシートIDを定義 const employeeSheetId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //アウトプットのフォルダーIDを定義 const outputFolder = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //スプレッドシートの情報を取得 var storeSheet = SpreadsheetApp.openById(storeSheetId).getSheetByName("店舗リスト"); //ファイルの内容を配列に格納 var datas = storeSheet.getRange(2, 1, 5, 3).getDisplayValues(); for (i = 0; i < datas.length; i++) { var storeNo = datas[i][0]; var storeName = datas[i][1]; //ファイルコピーする関数を呼び出す var storeUrl = copyFileSheet(employeeSheetId, outputFolder, storeName,storeNo); //店舗リストにコピー後のファイルURLを記載 storeSheet.getRange(i+2, 3).setValue("https://docs.google.com/spreadsheets/d/" + storeUrl); } } } 

3-3.コピー処理の作成

社員名簿のスプレッドシートをコピーし、引数に設定した対象店舗でフィルタします。

フィルタしたものを配列に格納してからシートに貼り付けを行っていきます。


function copyFileSheet(fileID, folderID, fileName,storeNo) {
  //社員名簿のID
  var file = DriveApp.getFileById(fileID); 
  //出力先フォルダーを定義
  var folder = DriveApp.getFolderById(folderID);
  //コピー処理
  var newFile = file.makeCopy(fileName, folder);
  //コピー後のIDを取得
  var newFileId = newFile.getId();
  //社員名簿スプレッドシートの情報を取得
  var employeeSheet = SpreadsheetApp.openById(newFileId).getSheetByName("社員名簿");
  //ファイルの内容を配列に格納
  var employedatas = employeeSheet.getRange(2, 1, 10, 5).getDisplayValues();
  //対象店舗のみを配列に再格納
  var newRecords = employedatas.filter(record => record[2] === storeNo);
  //貼り付けエリアを初期化
  employeeSheet.getRange(2, 1, 10, 5).clearContent();
  //シートに貼り付け
  employeeSheet.getRange(2, 1, newRecords.length, newRecords[0].length).setValues(newRecords);
  return newFileId;
} 

3-4.実行

上記スクリプトを実行してみると下記ファイルが出来上がります!

URLに新しいスプレッドシートのリンクが記載されます。

新宿店舗のファイルを見てみましょう。

新宿店のみのファイルが複製されました!

3-5.権限付与について

スプレッドシートでは対象のファイルに閲覧権限等付与することが可能です。

GAS標準のDriveAppとGoogleDrive APIを使用する方法があります。

2つの大きな違いとして権限付与の通知設定が異なります。

DriveApp    ⇒ 通知される

GoogleDrive API ⇒ 通知または非通知をフラグで選択可能

お客様の要望として多いのが、生成ファイルを確認してから連絡したいので、非通知にして欲しいというケースです。

その為、個人的にはGoogleDrive APIを使用するのがおすすめです!


  Drive.Permissions.insert(
   {
     'role': 'writer', //権限タイプ 編集者
     'type': 'user', //アカウントタイプ ユーザ
     'value': xxxxx@gmail.com
   },
   storeUrl,
   {
     'sendNotificationEmails': 'false' //true=通知, false=非通知
   });
} 

 

4.RPAとの差別化

既にRPA導入されている方が多いと思いますが、Googleサービスを対象とするものはGASとの相性が良く、RPA+GASという使い方もできるので、いくつかそれぞれの特徴を記載致します。

5.終わりに

BTCではこれまで培ったノウハウと新しい技術を日々追求しており、それをユーザーに届けております。

BTCからのご支援に興味のある方は是非以下からお問い合わせを。

https://rpa.bigtreetc.com/contact/

最新情報をお届けします!

RPAに関する最新コラムやイベント情報をメールで配信中です。
RPA領域でお仕事されている方に役立つナレッジになりますので、ぜび登録してください!

最新情報を受け取る方はこちら

もっと知りたい方はこちら


ページトップ