Googleスプレッドシート:編集履歴を自動記録 4
- egachira0250
- 5 時間前
- 読了時間: 3分
チーム共有のスプレッドシートでは、セル単位トリガーが拾えない並び替えや書式変更なども含め、あらゆる変更を漏れなく記録したいケースがあります。そこで有効なのが「定期スナップショット&比較」。時間駆動トリガーでシート全体を定期保存し、前回との差分を自動検出することで、あらゆる編集履歴を包括的に取得できます。
■ 動作環境
OS:Windows 10 Home(64ビット)
Chrome:140.0.7339.128(Official Build) (64 ビット)
■ 旧値/新値取得の3つの手法比較
手法 | メリット | デメリット |
e.oldValue/e.value | 単一セル編集の取得がシンプル;即時ログ | 複数セル・一括操作を拾えない |
CacheServiceキャッシュ | 複数セル編集を前後比較でカバー可能 | onSelectionChange設計が必要;キャッシュ期限に注意 |
定期スナップショット&比較 | 並び替え・貼り付け・書式変更など全操作を差分検出可能 | リアルタイム性は劣る;スナップショット間隔設計が肝要 |
今回は、幅広く操作種別をサポートできる「定期スナップショット&比較」の実装パターンを深掘りします。
■ 定期スナップショット&比較による差分取得実装
1. 全体フロー
時間駆動トリガーで「compareAndLog」関数を定期実行
現在シート全体の値を保存(Archive シート or Properties)
次回実行時に「前回スナップショット」と「現状」を比較
差異のあるセルを抽出し、「ログ用シート」に旧値・新値を追記
2. コード例
主なクラス・メソッド仕様
ScriptApp.newTrigger(functionName).timeBased().everyMinutes(n).create():時間駆動トリガー設定に利用(スクリプトエディタUIでも可)。
getDataRange().getValues():シート全体の2次元配列データを取得。
clearContents():シートをクリア。ヘッダーがある場合は残すロジックを追加検討。
Range.setValues(values):二次元配列を一括書き込み。ログ登録時の setValues はパフォーマンス向上に有効。
Sheet.getLastRow():最終行番号を取得。ログ追記に使用。
Range.getA1Notation():セルのA1表記を取得。
■ さいごに
今回は「定期スナップショット&比較」であらゆる編集を差分検出する手法を紹介しました。
次回は、大量のログを安定して処理する“ストレージ戦略とパフォーマンス最適化”について解説します。お楽しみに!
コメント