セルの「表示形式」変更で何が起きるのか?
GASでシートを集計する際、getValue か getValues で値を取得することになると思うけど、古事記によれば
The value may be of type Number, Boolean, Date, or String depending on the value of the cell.
Empty cells return an empty string.値は、セルの値に応じて、数値型、ブール型、日付型、または文字列型になります
空のセルは空の文字列を返します。
とある。
ところが他人が作ったシートをGASで集計した時、型がバラバラで地味に上手く動かん事が稀に良くあって、ウキー!ってなる
そう!
セルの「表示形式」!!!
だいたいお前のせいなんだよ
結論から言うと
こうなる。
見てわかる通りDate型はセルの表示書式の影響を受けやすい。
ただし、2019年12月25日水曜日 とか 12/25 のように日時として使えるカスタム形式であれば、getValue時もDate型は保持される。
型を調べた方法
カスタム関数から prototype.constructor.name でクラス名を取得した。
function getConstructorName(value) {
return value.constructor.name;
}
このやり方でクラス名を取得するのはブラウザ依存するらしいけど、GAS内部では普通に使えるっぽい。
Booleanに関して
BooleanをCheckboxとして表示できますが、Checkbox化後に書式なしテキストにした場合に挙動が変なことになる。
これはいかにもバグっぽい挙動なので、さすがに入力者も何かやらかしたのか分かると思うので、それほど目くじらを立てなくて良いかな?と
Stringで 'TRUE' とかコピペされるより、型的にはよほど安全です。
データの入力規則
データの入力規則の場合、リスト指定で結構なイタズラができる。
うーん、この…
いかがでしたでしょうか?
この仕様、いかがなものでしょうか?
おしまい