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アプリ, アプリケーション開発
-,

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

no image

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

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

GASの利用 ~Webアプリでスプレッドシートの値を表示する~

このページの内容 スプレッドシートの値の読み込みと書き込み実際にやってみる初回実行時のみ必要になる作業について実行した結果このアプリを修正していく場合 スプレッドシートの値の読み込みと書き込み GAS …

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

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

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

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

VisualStudio2019でSQLiteを利用する(SQLite.orgからDLLをダウンロード)

このページでは、Visual Studio 2019にてインストール等の作業が不要な実行ファイル配布型のWindowsアプリでSQLiteを利用するためにあれこれ必要な点をまとめています。 すでにSQ …

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

1980年代生まれ
石川県在住

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

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

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

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

PAGE TOP