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

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


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

関連記事

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

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

no image

【VBScript】管理者権限でVBScriptを実行させる

このページの内容 どんな時にこの機能が必要になるかソースコード どんな時にこの機能が必要になるか このページのタイトルにある通りですが、管理者権限が必要になるフォルダ内のファイルの編集などをVBSri …

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

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

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

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

GASの利用 ~Webアプリの開発をやってみる~

このページでは、Google Apps Scriptを利用してサーバーレスでWebアプリを開発するための初期段階として、Webブラウザで”Hello GAS”と表示させるまでの …

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

1980年代生まれ
石川県在住

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

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

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

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

PAGE TOP