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

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

ただいまの
回答率

90.37%

  • Google Apps Script

    1408questions

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

  • Google

    895questions

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

  • Google スプレッドシート

    93questions

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 264

Gento

score 4

実現したいこと

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

問題

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

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

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

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

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

/* カレンダーへイベントを登録する */
function getsheet() {

   //シートの項目を以下変数定義
     var sht, i, eventday, name, email, phoneNumber, start, end, added;

   //shtを定義
    sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");

   //シートの2行目〜最終行まで処理を繰り返す
    for(i = 2; i <= sht.getLastRow(); i++) {


/*--スプレッドシートの値を取得して変数へ格納--*/ 

 eventday = sht.getRange(i, 6).getValue();

//開始日をUtilities.formatDateでフォーマットしてbへ格納
 var b = Utilities.formatDate(eventday,"JST","yyyy/MM/dd");

 name = sht.getRange(i,3).getValue();

 email = sht.getRange(i,2).getValue();

phoneNumber = sht.getRange(i,4).getValue();

 var infor = email + " \n "+ phoneNumber;

 var starttime = sht.getRange(i,9).getValue();

 var H = starttime.getHours();
 var M = starttime.getMinutes();
 var S = starttime.getSeconds();

//new Dateメソッドで開始日時「yyMMdd hh:mm」をstartへ格納
 var start = new Date(b+" "+H+":"+M+":"+S); 


 var endtime = sht.getRange(i,10).getValue();

 var H1 = endtime.getHours();
 var M1 = endtime.getMinutes();
 var S1 = endtime.getSeconds();

//new Dateメソッドで終了日時「yyMMdd hh:mm」をendへ格納
 var end = new Date(b+" "+H1+":"+M1+":"+S1);

var options = {
  description: infor
  }

/*--カレンダーへ登録--*/

 added = sht.getRange(i,14).getValue();


 if(added == "") {
  Cal = CalendarApp.getCalendarById('0000@gmail.com');//<---ここを自分のgmailアドレスへ変更する

  Cal.createEvent(name,start,end,options);//createEvent(タイトル、開始日時、終了日時、オプション)

 sht.getRange(i,14).setValue("登録完了");

  }   //ifを閉じる
 }      //forを閉じる
}        //functionを閉じる
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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

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

問題の回避策

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

サンプルスクリプト

function onFormSubmit(e) {
  var range = e.range;
  range.setValues(range.getValues());
}

注意点

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/09 19:16

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

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/09 13:45

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

    キャンセル

  • 2019/03/09 14:09

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

    キャンセル

  • 2019/03/09 17:26

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

    キャンセル

  • 2019/03/09 17:27

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

    キャンセル

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

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Google Apps Script

    1408questions

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

  • Google

    895questions

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

  • Google スプレッドシート

    93questions