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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

3776閲覧

Googleスプレッドシートのスクリプトエディタでswitch文が上手くいかない

SASAKI_APPL

総合スコア100

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/12/23 15:10

編集2015/12/24 08:05

プログラミングはまだ初心者です。
Googleスプレッドシートのスクリプトエディタを使っています。
Googleフォームで送られた内容をある形でメールに送るものを作っています。

JavaScript

1function sendForm(e){ 2 3 // 件名、本文 4 var subject = "とある"; //件名 5 var body = ""; //本文 6 var sheet = SpreadsheetApp.getActiveSheet(); 7 var lastRow = sheet.getLastRow(); 8 9 // 入力カラム名の指定 10 var PRE='\n['; 11 var AFT=']\n'; 12 var NAME_FORM_NAME = '証拠資料の場所'; //フォーム作成時に設定した項目名 13 var DoDo = '証拠資料の種類'; //フォーム作成時に設定した項目名 14 var iPhone = '資料番号'; //フォーム作成時に設定した項目名 15 var MAIL_FORM_NAME = '出典'; //フォーム作成時に設定した項目名 16 var BODY1_FORM_NAME = '引用本文'; //フォーム作成時に設定した項目名 17 var BODY2_FORM_NAME = 'URL'; //フォーム作成時に設定した項目名 18 var BODY3_FORM_NAME = '資料タイトル'; //フォーム作成時に設定した項目名 19 var BODY_FORM_NAME = '投稿者'; //フォーム作成時に設定した項目名 20 21 22 var to = e.namedValues[BODY_FORM_NAME];// メール送信先 23 var name1 = e.namedValues[BODY3_FORM_NAME]; 24 body+="#"+e.namedValues[NAME_FORM_NAME]+e.namedValues[iPhone]+"・"+name1; 25 var mailAddress = e.namedValues[MAIL_FORM_NAME]; 26 body+="\n"+e.namedValues[DoDo]+"資料"+" "+mailAddress+" より引用開始。"+"\n「"; 27 var mailAddress1 = e.namedValues[BODY1_FORM_NAME]; 28 body+=mailAddress1+"」引用終了。"; 29 switch (e.namedValues[NAME_FORM_NAME]) { 30 case "N"://追記 N"N"に変えました 31 var mailAddress2 = e.namedValues[BODY2_FORM_NAME];//これがURLの定義 32 body+="\n"+"<"+mailAddress2+">"; 33 break; 34 default: 35 body+="";//⬅️Nであってもどうしても結果がdefaultになってしまう!! 36 break; 37 } 38 MailApp.sendEmail(to, subject , body); //メールを送信 39}

コードの下の方ににあるswitch文で、スプレッドシートのセルの証拠資料の場所(=NAME_FORM_NAME)の値が"N"だった時にbodyに"\n"+"<"+mailAddress2+">"を追加したいのですが、値がNであってもdefaultになってしまいます。
defaultに選択されてしまっていることは確かです。
caseのところが悪いのか、switchの直後のところが悪いのか、その他に原因があるのかわかりません。

わかりづらい説明ですみません。
どなたか教えてください。

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

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

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

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

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

guest

回答3

0

js

1e.namedValues[NAME_FORM_NAME] === "N" 2e.namedValues[NAME_FORM_NAME] == "N"

の結果ってどういうふうに返ってきますか??

もしかしたらそこがおかしいのかもしれないです

投稿2015/12/23 16:25

MasakazuFukami

総合スコア1869

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

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

MasakazuFukami

2015/12/24 04:05

ちなみになんですけど自分のgoogle app scriptの環境で function myFunction(){ var value = 'N'; switch (value) { case "N": Logger.log('case Nでした') break; default: Logger.log('default') break; } } を実行すると'case Nでした'がでます。 また、試していて一瞬ハマったのが コードを更新→command + Enterで実行や、 コードを更新→保存 → command + Enterだと更新されない時があります。 しっかり上のプレイマークを押してから更新すると反映されました。 その辺もチェックしてみるといいかもしれないです!!
SASAKI_APPL

2015/12/24 05:37

わざわざ、試して頂いて、ありがとうございます! 試しに、switchの前に var value = 'N'; にして、 switch (e.namedValues[NAME_FORM_NAME]) { を switch (value) { に変えると caseがちゃんと選択されます。 私が思うに、問題はGoogleのスプレッドシートの値がNだったと時に、ちゃんとcaseが選択されないことだと思います。 どうすればスプレッドシートの内容をしっかり判断してくれるのでしょうか、、、、
guest

0

Googleスプレッドシートについては全くの素人なので、外れていたらゴメンナサイ。

case N:

となっていますが、case のところには を指定する必要があるのでは?
つまり、変数N を指定することは出来ないので、case "N": と書くべきなのではないでしょうか?

投稿2015/12/23 15:32

pi-chan

総合スコア5936

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

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

SASAKI_APPL

2015/12/23 15:43

今、case "N":に変えてみましたがダメでした... 何度かcaseの部分は変えているのですが、、、
guest

0

自己解決

switchの直後の()の中をセルの取得にしてみたらできました

JavaScript

1 function sendForm(e){ 2 3 // 件名、本文 4 var subject = "とある"; //件名 5 var body = ""; //本文 6 var sheet = SpreadsheetApp.getActiveSheet(); 7 var lastRow = sheet.getLastRow(); 8 9 // 入力カラム名の指定 10 var PRE='\n['; 11 var AFT=']\n'; 12 var NAME_FORM_NAME = '証拠資料の場所'; //フォーム作成時に設定した項目名 13 var DoDo = '証拠資料の種類'; //フォーム作成時に設定した項目名 14 var iPhone = '資料番号'; //フォーム作成時に設定した項目名 15 var MAIL_FORM_NAME = '出典'; //フォーム作成時に設定した項目名 16 var BODY1_FORM_NAME = '引用本文'; //フォーム作成時に設定した項目名 17 var BODY2_FORM_NAME = 'URL'; //フォーム作成時に設定した項目名 18 var BODY3_FORM_NAME = '資料タイトル'; //フォーム作成時に設定した項目名 19 var BODY_FORM_NAME = '投稿者'; //フォーム作成時に設定した項目名 20 21 22 23 var to = e.namedValues[BODY_FORM_NAME];// メール送信先 24 var name1 = e.namedValues[BODY3_FORM_NAME]; 25 body+="#"+e.namedValues[NAME_FORM_NAME]+e.namedValues[iPhone]+"・"+name1; 26 var mailAddress = e.namedValues[MAIL_FORM_NAME]; 27 body+="\n"+e.namedValues[DoDo]+"資料"+" "+mailAddress+" より引用開始。"+"\n「"; 28 var mailAddress1 = e.namedValues[BODY1_FORM_NAME]; 29 var mailAddress2 = e.namedValues[BODY2_FORM_NAME];//これがURLの定義 30 body+=mailAddress1+"」引用終了。"; 31 32 switch (sheet.getRange(lastRow, 2).getValue()) { 33 case "N": 34 body+="\n"+"<"+mailAddress2+">"; 35 break; 36 default: 37 body+=""; 38 break; 39 } 40 41 42 MailApp.sendEmail(to, subject , body); //メールを送信 43 }

投稿2015/12/25 15:39

SASAKI_APPL

総合スコア100

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問