GASで複数ファイルを簡単にまとめたい!

ビジネス

はじめに

令和第一号記事がだいぶ遅くなってしまいましたが、令和初の投稿です!まず、GoogleDriveに日次でシステムからスプレッドシートレポートが出力されている場合、そのデータを1つのファイルにまとめたい!というシーンで使えるコードを紹介します。Google Apps Script (GAS) を使って実装して、それをSlackやChatworkにレポートとして配信するのもいいですね。

それでは早速始めていきます!

1.sampleデータ

POINT

サービスはGoogleDrive、スプレッドシート、GASを使って実装していきます。
前提条件として以下が必要です。
– GoogleDriveには日時でデータが上がっていること。
– スプレッドシートのファイル名は日付を入れること。
– 同一フォルダ内にファイルが存在していること。

スプレッドシートのファイル名

上記条件を満たすデータサンプルは以下のようなデータを指します。
ファイル名にそれぞれ出力した日付を入れてます。

GoogleDrive内のデータサンプル

スプレッドシート内のsampleデータ

スプレッドシートのデータは以下のようなデータを指します。IDと顧客名等をサンプルで入力しているデータです。

スプレッドシートのデータサンプル

2.GASコード

POINT

今回のコードは一部愚直なコードもありますが、別フォルダにあるスプレッドシートを一つずつ呼び出してそれらを一つのシートにまとめることが簡単にできます。

コードは大きく2つの関数で出来ています。コードを確認してもらえばわかりますが、コメント多めに書いてます。

DriveからスプレッドシートIDを取得

まず、var Folder = DriveApp.getFolderById(‘**************’); はGoogleDriveのフォルダパスをセットします。以下枠線の箇所に表示されているパスを指定します。

Dirveのパスを取得

検索するファイル

Driveにあるデータを全て参照したのち、一致するデータをここで指定して一つのスプレッドシートにまとめます。この時、コード上は月初から今日までのファイルを探す。という実装をしているのでfrom.setDate(1); で月初(当月)を取得するが、期間を指定したい場合はsetDateの引数を0や-1に変更すれば指定した期間の該当ファイル全てを取得することが出来ます。

GASコード

スプレッドシートIDからデータを取得

受け取った引数のデータ(スプレッドシートID)を使ってスプレッドシート上のデータを取得してreturnでもう一度呼び出し元関数に戻します。

GASコード

全コード

「DriveからスプレッドシートIDを取得」と「スプレッドシートIDからデータを取得」の両コードを合わせたものです。

GASコード

var requestVal = sheet.getRange(‘A1:D’ + requestCnt).getValues(); の「D」や、dailySheet.getRange(1 + reqCnt,1,rows,4).setValues(result);の「4」などで記載している列の指定コードが一部イケてないコードです。データサイズを鑑みて変更はしてください。可変でできるようにする記事は今後の課題として直したらアップデートかけます!

GASログ

結果

コードを実行すると、以下実行結果が確認できました。

複数スプレッドシートの取得結果

今回はここまでです!
いつか作ってみようと思っていた複数ファイルを1つのファイルにまとめるコードが出来たのでよかったです。機会があったら他のサービスともうまく連携した記事を紹介していきます。