web-dev-qa-db-ja.com

フォーム送信文字列をプレーンテキストとして扱い、先頭のゼロを保持するためにGoogleスプレッドシートを取得するにはどうすればよいですか?

ユーザーが情報を入力するGoogleフォームがあり、その一部には先行ゼロ(郵便番号、ID番号など)が含まれています。

ただし、このデータがGoogleスプレッドシートに保存されると、プレーンテキストとして扱われず、ゼロが削除されます。フォームフィールドは、検証のないテキストフィールドです。

これらの値を含むセルの範囲をプレーンテキストとして書式設定しようとしましたが、セルにテキストが既に存在しない限り、Sheetsは書式設定をプレーンテキストとして設定しないようです。したがって、列をプレーンテキストとして書式設定し、フォームを送信しても、先頭のゼロは削除されます。

これに対処するためのアプリスクリプトを作成しようとしましたが、それを必要とするユーザーに展開する良い方法はありません。

フォームエントリに一重引用符を追加するようにユーザーに指示することなく、これを回避するにはどうすればよいですか?これは非常に小さなことですが、よくある問題であると思われるものに対する簡単な解決策を見つけることができません。これが機能しない場合は、Googleフォーム/シートを完全に削除する必要があります。

8
res

私の答えの一部は次のとおりです。これは既知のバグです(新しく受け取ったフォームの送信では、古いバージョンのシートのように、リンク先の列の形式が尊重されません)。

後でデータをどのように使用するかに応じて、別のオプションは、フォーム送信を別のシートに正しい形式で再現することです。たとえば、列Eに5桁の郵便番号が含まれていて、先頭にゼロが含まれている場合(必要な場合)、次を使用できます。

=ArrayFormula(TEXT('Form Responses'!E:E,"00000"))

別のシートに。

ただし、他の列もすべて持ち込む必要があります。複雑になりすぎることなく、これはSheetsの新しいバージョンで合理的に簡単に達成でき、必要に応じて(たとえば)次のように列をフォーマットできます。

=QUERY('Form Responses'!A:G,"select * format E '00000'",1)

3
AdamL

私はこの問題に突き当たったばかりですが、残念ながら、私が期待している桁数がわからないため、欠落しているゼロの数がわかりません。幸いなことに、フォームを送信する前にこのことを考えました。すでに回答がある場合、これは役に立ちません(再度送信しない限り)。

この問題を解決するには:

  1. 質問タイプを「テキスト」に設定します
  2. [詳細設定]で[正規表現]を選択しました
  3. 次のドロップダウンボックスで、「一致」を選択しました
  4. テキストボックスに^ [\ d +] $と入力しました

この正規表現により、ユーザーは応答の開始時に開き角かっこを入力し、その後に少なくとも1桁の数字を入力し、閉じ角かっこで終了する必要があります。たとえば、[0021314]は有効なエントリです。これは数字のみを許可することに注意してください。角かっこを強制するだけの場合は、代わりに^ [。+] $を使用できます。

シートでは、これは[0021314]と表示されます。そのため、= mid(A1,2、len(A1)-2)のような式で実行できる角括弧を削除する必要があります。 =ここで、A1は[0021314]を含むセルです。セルをプレーンテキストとして自動入力および書式設定すると、必要な残りの処理が行われます。

正規表現を変更して、ユーザーがエントリの最初に単一引用符を入力するように強制することもできます

2
Rob C

ここおよび他のスレッドで提案されている解決策は、固定桁数の数字に対してのみ機能します。上記の郵便番号の5など。

ベルギーの電話番号の先行ゼロを保持する必要があります。
ベルギーの固定電話の構造は025382172(9桁)です。
携帯電話の構造は0475123456(10桁)です

新しいタブでデータを複製する回避策を見つけたと思った。これを行うには、2つの個別の配列を使用して、列のグループをバッチロードします。

最初の配列は、電話番号列G(含まれない)まですべての列をコピーします。 =ARRAYFORMULA('Form Responses'!A2:F302)
2番目の配列は、電話番号列Gから最後の列までのすべての列をコピーします。 =ARRAYFORMULA('Form Responses'!H2:P302)

電話番号の列には、コピーした値の前にゼロを追加する簡単な式があります:=("0"&'Form Responses'!G2)

...残念ながら、静的モードでのみ動作します。
動的モードでは、Googleフォームから新しい行が入力されると、配列がこの列に影響を与えないとしても、電話番号列Gの数式が台無しになります。

実際、式=("0"&'Form Responses'!G2)は、空の=("0"&'Form Responses'!G3)である次の行にシフトし、セルにイライラする値0を残します。

1つのブロック内のすべての列に対して1つの単一の配列に戻り、配列ゾーンの右側に重複する電話番号列を追加して、次の式を入力するだけで調査を進めます:=("0"&G3)...含まれている場合は、「ネイティブ」の電話番号列をマスクし、処理されたもののみを表示します(残念ながら、ページの適切な場所には表示されません)。

0
Pierre Becquart

「どうやったらわからない」と「どうやらできないようだ」と言われる長い風の方法(しかし、本当の恥):

私が管理できる最善の(しかし脆弱な)方法は、各桁に0〜9のスケールを使用して、一度に1桁の入力(したがって出力)を期待することです。

0
pnuts

これは古い投稿ですが、次のことをお勧めします...

結果タブで、A1:

=QUERY('Form Responses'!A:F)

G1で:

=ArrayFormula(IF(ROW('Form Responses'!G:G)=1, 'Form Responses'!G1, IF('Form Responses'!G:G="", "", "0"&'Form Responses'!G:G)))

H1で:

=QUERY('Form Responses'!H:P)

同様のアプローチを追加して、変更が必要な列のデータを変更できます。

0
Erik Tyler

このように「0」で始まる郵便番号の問題を解決しました...列を強調表示し、書式タブに移動して、「数字」、「その他の書式」、「カスタム数値書式」の順にクリックします。 「00000」と入力して適用した数字。そしてそれは働いた!

0
Pam Vienneau