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

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

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

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

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

2回答

4755閲覧

Googleフォームからの時間の回答がスプレッドシートで頭に ' が付く

Gento

総合スコア77

Google スプレッドシート

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

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

2クリップ

投稿2019/03/09 04:02

編集2019/03/09 09:52

実現したいこと

Googleフォームからの時間の回答をスプレッドシートへ
スプレッドシートからGoogleカレンダーへの登録

問題

「Googleフォームからの回答をスプレッドシートへ」は完了。
「スプレッドシートからGoogleカレンダーへの登録」もほぼ完了。

しかし、
Googleフォームからの時間の回答をスプレッドシートへ
の時点でシート上では'15:00になってしまいます

例えば、プルダウン選択で15:00と答えたとします。
すると、シート上で確認すると「'15:00」となります。これではカレンダーに登録する前に、手動で「'」を消す必要があります。

どうすれば数値の最初の「'」をない状態にできますか?

下記スプレッドシートのGoogle app scriptです。

javascript

1/* カレンダーへイベントを登録する */ 2function getsheet() { 3 4   //シートの項目を以下変数定義 5     var sht, i, eventday, name, email, phoneNumber, start, end, added; 6 7   //shtを定義 8    sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1"); 9 10   //シートの2行目〜最終行まで処理を繰り返す 11    for(i = 2; i <= sht.getLastRow(); i++) { 12 13 14/*--スプレッドシートの値を取得して変数へ格納--*/ 15 16 eventday = sht.getRange(i, 6).getValue(); 17 18//開始日をUtilities.formatDateでフォーマットしてbへ格納 19 var b = Utilities.formatDate(eventday,"JST","yyyy/MM/dd"); 20 21 name = sht.getRange(i,3).getValue(); 22 23 email = sht.getRange(i,2).getValue(); 24 25phoneNumber = sht.getRange(i,4).getValue(); 26 27 var infor = email + " \n "+ phoneNumber; 28 29 var starttime = sht.getRange(i,9).getValue(); 30 31 var H = starttime.getHours(); 32 var M = starttime.getMinutes(); 33 var S = starttime.getSeconds(); 34 35//new Dateメソッドで開始日時「yyMMdd hh:mm」をstartへ格納 36 var start = new Date(b+" "+H+":"+M+":"+S);  37 38 39 var endtime = sht.getRange(i,10).getValue(); 40 41 var H1 = endtime.getHours(); 42 var M1 = endtime.getMinutes(); 43 var S1 = endtime.getSeconds(); 44 45//new Dateメソッドで終了日時「yyMMdd hh:mm」をendへ格納 46 var end = new Date(b+" "+H1+":"+M1+":"+S1); 47 48var options = { 49 description: infor 50 } 51 52/*--カレンダーへ登録--*/ 53 54 added = sht.getRange(i,14).getValue(); 55 56 57 if(added == "") { 58  Cal = CalendarApp.getCalendarById('0000@gmail.com');//<---ここを自分のgmailアドレスへ変更する 59 60  Cal.createEvent(name,start,end,options);//createEvent(タイトル、開始日時、終了日時、オプション) 61 62 sht.getRange(i,14).setValue("登録完了"); 63 64  }   //ifを閉じる 65 }      //forを閉じる 66}        //functionを閉じる

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

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

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

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

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

guest

回答2

0

ベストアンサー

今の問題の状況は、Googleフォーム上へプルダウンを設定し、その中の選択肢の一つとして15:00のような時間を選択する項目があり、15:00を選択して投稿すると、スプレッドシート上に'15:00のように先頭にアポストロフィが付加されてしまうとのことで理解しました。

これが間違っていないようですと、この選択肢から送られた値はスプレッドシートへ貼り付けられた際に文字列として扱われるため、先頭に'が追加されてしまいます。以前、同様の問題を次のような方法で回避しました。

問題の回避策

  1. 下記のスクリプトを投稿されたデータが記録されているスプレッドシートのスクリプトエディタへ貼り付けてください。
  2. 関数onFormSubmitにトリガーとして、「イベントのソースを選択」を「スプレッドシートから」、「イベントの種類を選択」を「フォーム送信時」として設定してください。
    • トリガー設定は、スクリプトエディタを開いて「編集」 -> 「現在のプロジェクトトリガー」から行います。

サンプルスクリプト

javascript

1function onFormSubmit(e) { 2 var range = e.range; 3 range.setValues(range.getValues()); 4}

注意点

  • これは、getValues()で取得した値には'が含まれていないことを利用してこの値をsetValues()を使って上書きすることで先頭に'が追加されるのを回避しています。
  • もしも上書きすることで他の値に影響が出てしまう場合は、該当する列のみ変更することで回避してください。

投稿2019/03/09 09:12

編集2019/03/09 09:19
kisojin

総合スコア899

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

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

Gento

2019/03/09 10:16

上書きするとは、とてもいい参考になりました。 そして本当にありがとうございます!実現できました。
guest

0

' を入れる処理を無くしてください。それで解決するはずです。

投稿2019/03/09 04:31

Zuishin

総合スコア28656

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

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

Gento

2019/03/09 04:45

その「' を入れる処理を無くす」には、どうすれば良いのでしょうか?
Zuishin

2019/03/09 05:09

まずその処理をしているところを見つけなければなりませんね。
Gento

2019/03/09 08:26

googleフォームで、プルダウン形式で時間(9:00, 12:00とか)が送られてくると自動的に ' がつきます。 「その処理をしているところを見つける」とは、フォームから送信されてシートに記入される時でしょうか? スプレッドシートのスクリプトエディタでデバッグ情報だと フォームから送られてきた時間→ ' がある為かString型で時間になってくれない シートに直接時間を9:00みたいに書き込んだ場合→Date型でうまくいく
Zuishin

2019/03/09 08:27

私は見えないのでなんとも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問