GAS(GoogleAppsScript) Webアプリ アプリケーション開発

GASの利用 ~スプレッドシートの値が取得できない or 想定と異なる場合~

投稿日:2020年6月19日 更新日:

getValuesでスプレッドシートの値を取得しようとした際に、
・値が取得できない
・取得した値が想定していたものと違う
という状況に遭遇した場合について、このページでは記載しています。


※このページの内容は、GASの利用 ~Webアプリでスプレッドシートの値を表示する~の続きで書いているので、どのような処理をしているのか詳細は、こちらのページで確認してください。

nullが返ってくる?

Googleスプレッドシートの値を取得する際に、GASでは、getValuesとgetDisplayValuesという2種類の方法がありますが、それぞれで取得できる値が変化します。

どのように変化するか、以下のようなファイルを読み込ませた結果を記載します。
※ここではA3セルには“=A1”という値を、B3セルには“=B2”という値を入れています
※A7とA8には“true”,“false”とそれぞれ書きましたが、自動で大文字変換と中央配置の処理がされています。


この状態でgetValuesで実行すると、処理は正常に動作しても、クライアント側にはnullが渡されてしまいます。

alertで表示してみると・・・

しかし、GAS側のreturnの内容をログに書き出すようにしてみると、

getValuesの実行結果

ここで、注目したいのは、A5セル、B5セルの値がどのように処理されているかです。
本来であれば、そのままの日付と時刻のような感じで表示されるはずが、“日付型の値”として処理されてしまっています。
この日付の処理が問題となります。
※他にも問題となるケースがあるかもしれませんが、ここでは触れません。

ちなみに、日付の入った5行目の値を消してみると、次のように正常に処理されて、表示されていることが分かります。

“日付”がないと問題なく表示される

getDisplayValuesを使う

これまで、getValuesで書いていた部分を、getDisplayValuesに変えるだけで、挙動が変化します。

//このようにgetDisplayValuesに変更するだけです
sheet.getRange(1, 1, last_row, last_col).getDisplayValues();

結果は、次のようになります。

getDisplayValuesでの結果

DisplayValuesの名前の通り、画面で表示されているのと同じ値を返してくれて、想定していた通りの表示となっていることが分かります。

但し、ここで注意したいのは、先ほどのgetValuesではtrueやfalseと表示されていたセルもTRUEやFALSEと変化してしまっていることです。
もしこの状態で、クライアント側でif文などでの比較を行うと、やはり想定外の挙動となることが考えられます。

ですので、”実際の値”を利用したいのか、”表示されている値”を利用したいのかによって使い分けを行う必要があります。

【おまけ】処理時間に違いはあるのか?

getValuesとgetDisplayValuesで処理速度に違いがあるのか、for文で3000回実行するロジックをそれぞれ10回実行してみました。

3000回実行した結果
getValuesの場合:最短 9.209sec、最長 19.560sec、平均 12.480sec
getDisplayValuesの場合:最短 10.061sec、最長 19.194sec、平均 14.409sec

平均を見る限りgetValuesのほうが早いようですね。

ただ、その時のサーバーの状況に左右されるので、上記結果のように最長時間だけ比較するとgetValuesのほうが長いので、必ずしもそうではないことを留意しておく必要もありますね。


Follow me!

-GAS(GoogleAppsScript), Webアプリ, アプリケーション開発
-,

執筆者:


  1. 匿名希望 より:

    ありがとうございます。
    助かりました。

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

関連記事

no image

【C#】【VBScript】アプリケーションの自動再起動

このページの内容 この機能を作成した理由ソースコード この機能を作成した理由 24H稼働している工場等のクラサバ系のシステムで、サーバー側ソフトが原因不明のハングアップをしてしまい、夜中に呼び出しを受 …

VisualStudio2019でSQLiteを利用する(NuGetパッケージのインストール)

このページでは、VisualStudio2019にてNuGetパッケージのインストールによってSQLiteを利用するための手順を紹介しています。DLLをダウンロードして、参照設定にて利用される方法はこ …

GASの利用 ~新しい生活様式のためのメモ①~

コロナウィルスの拡大により、政府から“「新しい生活様式」の実践例”というものが、公開されていることをご存知の方も多いと思います。その中で、“移動に関する感染対策”という項目の中で、“発症したときのため …

GASの利用 ~新しい生活様式のためのメモ②~

このページの内容 コーディング(.gs)コーディング(view.html)実行結果メニュー画面のコーディング(menu.html)サーバー側のコーディング全体(.gs) ①のページにて入力画面を作成し …

no image

MP4ファイルから字幕データの抽出

このページでは、Windows10にてffmpegとPowershellを利用して、MP4ファイルから字幕データを抽出する方法を説明しています。 使用するMP4ファイルについてffmpegの取得と字幕 …

このサイトの管理者について

1980年代生まれ
石川県在住

メーカー2社経験後に退社

1年程度自由に在職中はできなかったことにチャレンジ

その後コロナの影響でなかなか仕事が見つかりませんでしたが、無事就職

現在はシステム会社に勤務中

PAGE TOP