うわあ!!!トラックをバックさせます。はるかに簡単なアプローチがあります
月次レポートでも同じことをしようと計画しているので、ここ数週間、これについて少し調べてきました。実際のコードはまだ肉付けされていませんが、進行中に追加します。
Google ドキュメントには、ドキュメントの操作に関連する非常に多くの API や類似の用語があり、少し混乱することがあります。まだご存じない場合は、GAS (Google Apps Scripting) と GAE (Google App Engine) はまったく別のものであるという事実を頭の中で確立してください。それらは同じように聞こえますが、Java が JavaScript に似ているのと同じくらい似ています。
GAS は、検証や動的ドキュメントなどを駆動する Google Docs (将来的にはスタンドアロン モジュールとしてインポートできるようになることを願っています) に埋め込まれた scrips ですが、ほとんどの疑いよりもはるかに強力です (変更/更新などを行うことができます)。外部ドキュメントおよび自動電子メール応答)。これらは Google のサーバー上で実行されるため、軽量である必要があることに注意してください。スクリプトが完了するまでに時間がかかる場合は、実行が途中で中断されます (制限を見つけるためにグーグルで調べてください)。つまり、バニラ JS のみを使用し (jQuery のようなフレームワークは使用しないでください)、可能な限りパフォーマンスの調整を行う必要があります。
一方、GAE は、クラウドのどこかに存在する (利用可能なデータベース層を備えた) Web サーバーのようなものです。これは、ビジネス/利益のための便利な (そして既に展開されている) ミドルウェア レイヤーとして存在し、カスタム アプリを作成して、より重い作業を行うことができます。残念ながら、外部スプレッドシートの API は、私たちが取り組んでいることを単独で達成するにはあまりにも制限されているため、オプションではありません。
Google Apps Scripting と時間ベースのトリガーを使用した自動化
このアプローチは機能するはずですが、少しハック的なアプローチが必要です。
レポート シートを含むワークブックを開きます。[ツール] -> [スクリプトエディタ...] をクリックします。[トリガー] -> [現在のスクリプトのトリガー...] に移動します。
トリガーが存在しない場合は、1 つ追加します。次に、[イベント] ドロップダウン メニューで [時間主導型] を選択します。
サーバー側イベント ハンドラーの世界へようこそ。クラウドベースのドキュメントで得られる優れた機能の 1 つは、ドキュメント内で直接 cron ジョブをトリガーできることです。外部ミドルウェアは必要ありません。
「月のタイマー」にはトリガーがありません。ここがハッキーになるところです。この機能の欠如を回避するには、トリガーを毎日起動し、JavaScript を使用して現在の日付を前日の日付と一致させる必要があります。
【ここにコードが入ります】
まず、タイム トリガー イベント ハンドラーにアタッチされる関数が来ます。このコード ブロックは単純に日付を解析し、それを前の日付と比較し、翌日の比較のために非表示のシート (永続レイヤーとして使用) に値を保存します。新しい月の条件が満たされると、次のコード ブロックが実行されます。
【ここにコードが入ります】
あなたのものは明らかに私のものとは少し異なりますが、基本的な概念は次のとおりです。
- SpreadSheet オブジェクトを読み込みます (Sheet オブジェクトと混同しないでください)。
- テンプレートの Sheet オブジェクトを見つけます
- テンプレート シートのクローンを作成し、適切な日付範囲ベースの名前を付けます
私の次のステップは、月からデータを抽出して積み上げ折れ線グラフを生成し、現在のステータスを上層部に報告することです。
注: ドキュメントのマルチユーザー コラボレーションの性質により、イベントはサーバー側で発生する必要があります。これは私たちにとって大きな問題を引き起こします。コード エラーが発生した場合、イベント コードは別の場所で実行されるため、ブラウザーからのフィードバックは得られません。これに対する唯一の解決策は、トリガーに通知を設定して、スクリプトが失敗したときにすぐに電子メールを送信することです。
更新: これを調査しているときに、別のクールなテクニックを見つけました。バグなしでこれを機能させることができれば、Google カレンダーでマークされた日付を使用してトリガーを呼び出すことを試みるかもしれません。