BETA

【GAS】社内文書を自動で作成するミッションに参加した

投稿日:2020-07-25
最終更新:2020-07-25

フォーム入力されるとやってくるメール

G Suite上に、とある入力フォームがある。社内の全従業員が入力する可能性のあるフォームだが、入力頻度は月一回と低い。入力されると、入力内容はスプレッドシートに記載され、その複写がメール送付されてくる。

通常であればこのメールをトリガーにして、フォームの入力内容と提出されたフォームに添付された書類を精査し、問題がなければ報告書を起票して上司に送付する。

エクセルシートとスプレッドシート

上司に送付する報告書はエクセルシートだ。
現状では、報告書を作成するために以下をドライブからダウンロードする。

  1. フォームの入力内容が記載されたスプレッドシート
  2. 報告書の元になるマクロが実装されたエクセルシート

マクロ付きエクセルシートをどうするか

パッケージ版Officeが必要となるので、ダウンロードして実行する方法はありえない。とすると、このエクセルシートはドライブ上に置いておくのがベストだ。

マクロとして実装されているロジックは、セルに値を設定するプレゼンテーションロジックが大半で、ビジネスロジックらしきものはほとんどない。

となれば、マクロについては無視してしまっても良さそうだ。テンプレートファイルを単純コピーして、IFされたフォームの入力内容を張り付けて報告書として保存しておくだけでいい。

何を自動化するべきか

出先からスマホやタブレットで報告書の作成ができないのは、緊急性が低いフォームだとしても地味に勝手が悪い。スマホやタブレット上で精査でき、可能であれば上司に承認依頼まで済ませたい。

本当はチャットにメッセージを流したかったのだが、弊社では残念ながらGoogle Chatはまだ利用できない。仕方がないので、メールベースで進める。

ファイルをダウンロードする行為は、マクロ付きエクセルシートをローカルで実行するためのものなので不要にできる。

ということで、結論。
マクロが実行できない人でも精査処理が進められるよう、ドライブ上で報告書を自動で作ってしまおう。

報告書テンプレートを準備

適当なエクセルファイルを準備する。

今回はそこまで凝る必要はないので、マイクロソフト謹製のテンプレートレイアウトを流用することにしてマイドライブに保存した。

とにかくやってみる

このミッションでは、TypeScriptとclaspを使ってローカルで開発を進めていくが、claspの設定などは触れない。

まずは、アップロードしたエクセルファイルがどこに存在しているか、GASで把握できなければならない。そこで、動作確認の意味も込めてこのようなスクリプトを準備した。

function myFunction() {  
    const files = DriveApp.getRootFolder().getFiles();  
    while(files.hasNext()) {  
        const file = files.next();  
        console.log(file.getName());  
        console.log(file.getId());  
    }  
}  

今回はアップロード先がマイドライブだったので、DriveApp.getRootFolder()としている。任意のフォルダを指定する場合には、そのフォルダのフォルダIDが必要でDrivaApp.getFolderById(id)とする必要がある。


上手いことファイルIDが判明したので、後はゴリゴリと実装すればよさそうだ。今回のミッションでは、いろいろとフレキシブルなケースは意識せずにとりあえず自分だけが動けばいいスタンスで進めていく。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

そろそろ業界からオプトアウトされそうな枯れ老人の足掻きブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう