Google スプレッドシートのIMPORTRANGE関数は便利なのですが、期待するデータ更新頻度と実際に反映されるタイミングがずれることがあります。
IMPORTRANGEで読み込んだデータを確実に更新するためのテクニックとして、IMPORTRANGEで指定するURLにページを開いた際にランダムにクエリストリングを付与することです。これによりページを開くたびに、IMPORTRANGEで指定しているURLが変わるのでGoogleは新しいページからデータを読み込む必要があると判断し更新します。
が、NowやRandなどの関数はIMPORTRANGEで2015年から使えなくなったので、別の方法でランダム値を生成してあげる必要がある…。
本来は、IMPORTRANGEで参照しているシートのデータが更新されたら自動的にデータが反映されることを期待します。しかし、実際には反映されません。
またページを閉じて開きなおしても反映されないことがあります。(これは性能のために、データをキャッシュしている影響と推測されます)
なので、ページを開くたびに参照先のURL文字列を変えて、キャッシュを使わないようにしましょうというバッドノウハウ。
追記
いまいちうまく動かないので、行を消して追加するという対応でいったん回避することにしました。
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName(“hogehoge”);
sheet.deleteRows(2,1);
cell.setValue(‘=IMPORTRANGE(“1111111111111111111111xxxxxxxxxxxxxxxxxxx”,”hoge!j3:t200″)’);