

GASにおいて、スプレッドシートの値を取得しようとしています。  
しかし、スプレッドシートがquery関数を使用している複雑なものだからなのか、取得した値が古いものになってしまいます。

例えば下記画像1枚目がスプレッドシートをリロードした直後の画像で、2枚目がリロード完了したあとの画像です。  
このように数値が変わってしまう場合に、1枚目の数値が取得されてしまいます。  
[![スプレッドシートリロード直後の数値画像](https://i.stack.imgur.com/r8jnW.png)](https://i.stack.imgur.com/r8jnW.png)

[![スプレッドシートリロード完了後の数値画像](https://i.stack.imgur.com/X6a6H.png)](https://i.stack.imgur.com/X6a6H.png)

数値は下記のコードで「value」で取得しています。

[code]

     // スプレッドシートのURL
        const spreadSheetURL = "url";
        const sheetName = "シート名";
    
    
        // スプレッドシートオブジェクト
        var spreadSheet = SpreadsheetApp.openByUrl(spreadSheetURL);
    
        // シートオブジェクト
        var sheet = spreadSheet.getSheetByName(sheetName);
    
        var value= parseInt(sheet.getRange('D9').getValue());
    
[/code]

試したこととしては

  1. Utilities.sleep() を使用して、間隔を空ける
  2. 数式をコピーし、もう一度同じ数式を入力、その後SpreadsheetApp.flush(); で変更内容を即反映させる
  3. 2のあと1を行って間隔を空ける

対応方法ありましたらご教示頂けますと幸いです。

よろしくお願いいたします。


CC BY-SA 4.0
2023-01-24T08:02:50.523
93543
2023-03-24T07:44:35.367
56745
question
google-apps-script google-spreadsheet
GASとスプレッドシートの連携においてスプレッドシートの更新が遅くスプレッドシートの最新の値が取得できない


私は、そのような事態に遭遇したことがないので使ったことがありませんが  
このようなメソッドをお試しになるとどうなりますでしょうか。  
スプレッドシートの保留中の変更をすべて適用します。

[code]

    SpreadsheetApp.flush();//←追加
    var value= parseInt(sheet.getRange('D9').getValue());
    
[/code]

あと、仮にスクリプトがそのスプレッドシートに記述されているのなら、

[code]

    // var spreadSheet = SpreadsheetApp.openByUrl(spreadSheetURL);
    var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();//←上を削除、ここを追加
    
[/code]

としても変わらないでしょうか。


CC BY-SA 4.0
2023-03-24T07:44:35.367
94293
2023-03-24T07:44:35.367
57654
93543
answer