質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2131閲覧

Googleスプレッドシートに数値や文字列を含めた配列を貼ったときに、頭が0で始まる数値が消える問題

takaD

総合スコア315

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/11/01 05:52

表題の通りなのですが、0が頭にある文字列(数字のみ)をスプレッドシートに```setValues()

配列で扱う際には、データ型は数字のみでもStringで認識してくれますが、それを貼るとNumber化して、結果頭の0が消えてしまいます。 原因は判明しており、スクリプト側ではなく、スプレッドシート側の問題で、 数字の表示形式が自動になっていて、そのセル上に```setValues()```するのが原因でした。 予めセルの表示形式を書式なしテキストにした状態で動かせば0が消えずに済むのですが、 例えばシートを新規作成した場合などは自動になってしまうため、 スクリプト側でどうにかしなければならない状況です。 極力シングルクオーテーションは無しでどうにかしたいと思っているのですが、 なにか方法があったりするでしょうか? ご意見いただけると幸いです。 ![イメージ説明](f496c1673b96d9c250392a0f808c951a.jpeg)]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/11/01 11:15

大抵の場合、ゼロが頭にある文字列という設計が間違っています。 それは何の文字列ですか?
takaD

2019/11/01 12:09

ご意見ありがとうございます。 この文字列と数字が混在して、なおかつ0頭のものも存在しているという設計は、昔のデータベースの状態をそのままGAS化しようとしたところが大本の問題となっていて、詳細な情報は省いて申し訳ありませんが、製品品番や製品名に相当します。
macaron_xxx

2019/11/04 23:56

>ゼロが頭にある文字列という設計が間違っています。 これは極端すぎでしょう。
takaD

2019/11/05 00:38 編集

ご意見ありがとうございます。 経験ない私が言うのもなんですが、papinianusさんのご意見も納得できるもので、 スプレッドシートで数字を文字列として扱いたいのであれば「’」で始めることは前提ですし、 使わないのであれば0が消えるのはスプレッドシート側の仕様ですので、そこの無理を推そうとしている私側が間違っているとは思っております。 また、文字列と数字の混在は私が触れているだけで下記問題が発生したりもしました。 ・混在データにreplace関数などを使用する際、数字のみの情報が入ると、エラーとなる。 (.toString()を挟むと改善) ・Query関数を使用する際混在データ量が多いと、なぜか数字情報のみ空白で出力される (ARRAYFORMULA(TO_TEXT()を挟むと改善) ・そして今回の何も考えずに数字を貼り付けると、データが改変される(ゼロが消える) (setNumberFormats()を使うと改善) 他の言語ではどういうものかわからないのですが、少なくてもスプレッドシートとGASを使う場合は、これらの仕様と向き合う必要性があると感じております。 先代の設計を引き継ぐというのはいろいろとトラブルがあるのだと感じつつ、精進していきたいと思っております。
papinianus

2019/11/05 15:57 編集

フォローありがとうございます。レガシーシステムには苦しめられたことあるのでご苦労お察しします。 gasで影響が出る場面はないと思いますが、js(他の言語でもあったと思いますが)では、リーディング0の数値リテラルは、8進数になるので、データとしての数値(数値様文字列)に0がついているのは好ましいことではないとの認識です。 極端かもしれないです。一応、大抵の場合、とエクスキューズはしています。が、極端でダメな理由が理解できないので今後もこういうこと言うと思います。twitterみたいに私をミュート/ブロックできるといいのですがね。
guest

回答1

0

ベストアンサー

例えば、一つの方法として、setNumberFormatを使用するのはいかがでしょうか。サンプルスクリプトは次の通りです。

サンプルスクリプト

javascript

1var sheet = SpreadsheetApp.getActiveSheet(); 2var values = [["0001"], ["0002"]]; 3sheet.getRange(1, 1, 2, 1).setNumberFormats([["@"], ["0"]]).setValues(values);
  • これを実行すると、アクティブシートのA1, A2に0001, 2が入ります。今の場合、@を使用することでテキストとして配置しています。

参考

  • setNumberFormats()
    > @: Inserts the raw text for the cell, if the cell has text input. Not compatible with any of the other special characters and won’t display for numeric values (which are displayed as general format).

投稿2019/11/01 07:55

kisojin

総合スコア899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takaD

2019/11/01 12:03

回答ありがとうございます。 貼る際にフォーマット指定ができたのですね。 こちらを参考にがんばってみます。
kisojin

2019/11/02 23:33

問題が解決したとのことで安心しました。ご連絡ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問