表題の通りなのですが、0が頭にある文字列(数字のみ)をスプレッドシートに```setValues()
配列で扱う際には、データ型は数字のみでもStringで認識してくれますが、それを貼るとNumber化して、結果頭の0が消えてしまいます。 原因は判明しており、スクリプト側ではなく、スプレッドシート側の問題で、 数字の表示形式が自動になっていて、そのセル上に```setValues()```するのが原因でした。 予めセルの表示形式を書式なしテキストにした状態で動かせば0が消えずに済むのですが、 例えばシートを新規作成した場合などは自動になってしまうため、 スクリプト側でどうにかしなければならない状況です。 極力シングルクオーテーションは無しでどうにかしたいと思っているのですが、 なにか方法があったりするでしょうか? ご意見いただけると幸いです。 ![イメージ説明](f496c1673b96d9c250392a0f808c951a.jpeg)]
大抵の場合、ゼロが頭にある文字列という設計が間違っています。
それは何の文字列ですか?
ご意見ありがとうございます。
この文字列と数字が混在して、なおかつ0頭のものも存在しているという設計は、昔のデータベースの状態をそのままGAS化しようとしたところが大本の問題となっていて、詳細な情報は省いて申し訳ありませんが、製品品番や製品名に相当します。
>ゼロが頭にある文字列という設計が間違っています。
これは極端すぎでしょう。
ご意見ありがとうございます。
経験ない私が言うのもなんですが、papinianusさんのご意見も納得できるもので、
スプレッドシートで数字を文字列として扱いたいのであれば「’」で始めることは前提ですし、
使わないのであれば0が消えるのはスプレッドシート側の仕様ですので、そこの無理を推そうとしている私側が間違っているとは思っております。
また、文字列と数字の混在は私が触れているだけで下記問題が発生したりもしました。
・混在データにreplace関数などを使用する際、数字のみの情報が入ると、エラーとなる。
(.toString()を挟むと改善)
・Query関数を使用する際混在データ量が多いと、なぜか数字情報のみ空白で出力される
(ARRAYFORMULA(TO_TEXT()を挟むと改善)
・そして今回の何も考えずに数字を貼り付けると、データが改変される(ゼロが消える)
(setNumberFormats()を使うと改善)
他の言語ではどういうものかわからないのですが、少なくてもスプレッドシートとGASを使う場合は、これらの仕様と向き合う必要性があると感じております。
先代の設計を引き継ぐというのはいろいろとトラブルがあるのだと感じつつ、精進していきたいと思っております。
フォローありがとうございます。レガシーシステムには苦しめられたことあるのでご苦労お察しします。
gasで影響が出る場面はないと思いますが、js(他の言語でもあったと思いますが)では、リーディング0の数値リテラルは、8進数になるので、データとしての数値(数値様文字列)に0がついているのは好ましいことではないとの認識です。
極端かもしれないです。一応、大抵の場合、とエクスキューズはしています。が、極端でダメな理由が理解できないので今後もこういうこと言うと思います。twitterみたいに私をミュート/ブロックできるといいのですがね。
回答1件
あなたの回答
tips
プレビュー