コピー2024/3/1記事内に広告が含まれていることがあります。GASのgetValueやgetValues,getDisplayValueなどでスプレッドシートの値を取得しようとしたときに、実際に表示されている値と、取得した値が異なる場合があります。ここでは、この原因と対処法についてまとめています。対処法スプレッドシートを軽くするUtilities.sleep()などでプログラムを待機するUtilities.sleep()とは何か?setTimeoutを使うUtilities.sleep()の注意点エラー(不具合)内容この事象はエラーとして報告されるわけではないのですが、実際にスプレッドシートに表示されている値と、取得してきた値が違うというのは開発者からするとエラー以外のなんでもありません。スプレッドシート上では以下のように、N15セルの値は「4」となっています。).getDisplayValue()などで取得した値は「0」になります。.getValues()など配列で取得した場合も同じように0になります。console.log(testDisplayVal);//出力結果12:16:19情報012:16:19情報0なお、他のセルでは「7」と表示されているのに、取得した値は「4」となり、表示されている値と取得した値が異なるという事象も発生していました。原因この原因はスプレッドシートで複雑な数式や大量の数式を使用していることで、自動計算で数式処理が完了するまでに時間がかかることです。GASでシートにアクセスすると、その瞬間から自動計算が始まるのですが、その処理が完了する前の計算途中の段階でgetValue()などを行うため、取得した値が「0」になったり、異なる数値になったります。このため、数式で算出している値を文字列に変えてGASを実行すれば、きちんとその値を取得してきてくれます。考えうる対処法はいくつかあります。(きっと他にもたくさんあると思いますが一例です。)対処法スプレッドシートの数式処理を軽くするUtilities.sleep()などでプログラムを待機する。スプレッドシートを軽くするスプレッドシートの数式処理や条件付き書式の処理が多すぎて、自動計算が終了するまでに時間がかかっていることが原因なので、スプレッドシートの処理を軽くします。やることとしては、数式を簡略化する。行列が多すぎるのであれば削除して減らすなどです。Utilities.sleep()などでプログラムを待機する2つ目の対処法はUtilities.sleep()など、プログラムを一時的に待機させる処理を使用することで、対象のスプレッドシートの計算処理が終わってから、getValue()などの処理を走らせることです。Scriptのプログラムです。UtilitiesとはGASの専用のクラスで、文字列のエンコード/デコード、日付の書式設定、JSON操作などのメソッドが用意されています。そのUtilitiesクラスの中のsleepメソッドを使用するということです。10秒停止する場合は以下のように記述します。Utilities.sleep(10000);なお、最大の指定は3000,000ミリ秒(5分)です。ユーティリティとは何か?Utilities(ユーティリティ)とは、「便利」や「有用」という意味で、プログラミングで使用する場合は「便利なメソッド」や「便利な関数」といった意味になります。ユーティリティ関数といったりもします。ミリ秒)を使う方法があります。setTimeoutはJavaScriptのメソッドで、指定したミリ秒後に、指定したコードを実行するものです。処理を関数化している場合はこちらの方が使いやすいかもしれません。setTimeout()Utilities.sleep()の注意点Utilities.sleep()を使う際に注意しなければいけないことがあります。それは、記述する場所です。GASでコードを記述する場合、処理開始前の準備として、上の方に対象のスプレッドシートやIDなど変数に代入する処理を記述することがあります。この前処理のタイミングに記載してもあまり意味がありません。以下のような表記です。);このタイミングでUtilities.sleepを実行してもただ時間が経過するだけです。Utilities.sleepを記述するのはあくまで、.getRange()などでGAS経由でスプレッドシートにきちんとアクセスしてからにします。getValueなどでデータを取得するといった流れになります。こちらの方法でデータが正しく取得できるかと思いますので、お困りの方はぜひ試してみてください^^SpreadSheet「役に立った」と思ったら、記事のシェアをお願いします。'NoneType'のエラー原因と対処法まとめ(初心者向け・実例でわかりやすく解説)2024/2/272024/2/27【CSS】メディアクエリ(@media)とは何か?使い方を実例で解説|.cssファイルやlinkタグでの画面幅以上・以下の指定(初心者向け、わかりやすい)2023/6/202023/10/1【画像で解説】WinSCPの使い方。pull(プル)とは何か?使い方を実例で解説|引数が無い場合の処理内容やFETCH_HEADとは何か?--rebaseオプションの使い方2023/7/182024/2/22カテゴリーPCHTMLDesignAffiliateCSS・SCSSrubyRailsSpreadSheetAffinityAppSheetDatabaseAppsScriptEditorStripeAWSLINEPHPECWordPressServerSquareVue.jsGeneralJavaScriptSEOgit/githubBrowserDockerJSONPythonCommandLaravelNode-jsサイト運営者shinWEB制作・エクステリアデザインを行う、山と自然大好きなプログラマー&デザイナーです。コロナを機に長野の山奥に移住、標高1200mの地で薪ストーブのあるログハウスで暮らしています。妻と子供をこよなく愛する1児の父。'NoneType'のエラー原因と対処法まとめ(初心者向け・実例でわかりやすく解説)2024/2/272024/2/27【CSS】メディアクエリ(@media)とは何か?使い方を実例で解説|.cssファイルやlinkタグでの画面幅以上・以下の指定(初心者向け、わかりやすい)2023/6/202023/10/1【画像で解説】WinSCPの使い方。クエリ文字列を解析できません。r.children[i]}}}}}()タイトルとURLをコピーしました。