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

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

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

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

JavaScript

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

Q&A

解決済

3回答

1813閲覧

条件によって実行するfunctionを変えたい

SASAKI_APPL

総合スコア100

Google Apps Script

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

JavaScript

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

0グッド

1クリップ

投稿2016/04/24 07:41

編集2016/04/24 08:08

プログラミングはほとんどやったことがないので、非効率なことをしようとしているかもしれませんが、ご了承ください。

Googleフォームを使っています。フォームの回答のスプレッドシートの内容をメールするするものを作っています。
そこで、セルの内容に合わせて、実行するfunctionを決めたいです。

イメージとしては
フォームが投稿されたらトリガーで、
下のコードの中にある
function Start
を実行させて、
投稿された内容に応じて他の
function sendForm1や
function sendFrom2を実行させたいです。

function sendFrom1などは正常に動くことを確認していて、それをトリガーに設定して動かすことはできます。

問題はfunction Startの中身です。
どうしたらfunction Startから他のfunctionを実行させることができるでしょうか?
下のコードでは、まったく動きません。(追記:全く動かないというのは、トリガーをfunction sendForm1に設定する際は、sendForm1が実行されますが、トリガーをfunction Startに設定してもsendForm1やsendForm2が実行されないということです。)

アドバイスをお願いします。

JavaScript

1function sendForm1(e){ 2  3 // 件名、本文 4 var subject = "[SOASOA]";  //件名 5 var body = "\n------------------------------------------------------------";  //本文 6 var sheet = SpreadsheetApp.getActiveSheet(); 7 var lastRow = sheet.getLastRow(); 8  9 var to    = "exanmple@gmail.com"; 10 11  MailApp.sendEmail(to, subject +"[資料番号:"+g+"]"+name1 , "[資料番号:"+g+"]" + body); 12} 13 14function sendForm2(e){ 15  16 //ここに処理2個目 17 18  MailApp.sendEmail(to, subject +"[資料番号:"+g+"]"+name1 , "[資料番号:"+g+"]" + body); 19} 20 21/* 22——————————————————————————————————————————— 23この下が問題の部分です!!! 24——————————————————————————————————————————— 25*/ 26 27function Start(){ 28  var sheet = SpreadsheetApp.getActiveSheet(); 29  var lastRow = sheet.getLastRow(); 30  31  // 入力カラム名の指定 32  var PRE='\n['; 33  var AFT=']\n'; 34  var SYOKO = '証拠資料の種類'; //フォーム作成時に設定した項目名 35 var WHEN3= sheet.getRange("B1").getValue();//'資料年月日' 36 var BOOKNAME = '書名・新聞名'; 37 var SITENAME = 'サイト名'; 38 var EDITOR = '編集者'; 39 var PAGENUM = '引用ページ (1件目)'; 40 var GENNUM = '原本番号'; 41  var HONBUN = '引用本文 (1件目)'; //フォーム作成時に設定した項目名 42  var LINK = 'URL'; //フォーム作成時に設定した項目名 43 var RESPECT = '肩書き'; 44 var WRITER = '著者名'; 45  var EVIT = '資料タイトル (1件目)'; //フォーム作成時に設定した項目名 46  var WHO = '投稿者'; //フォーム作成時に設定した項目名 47 48 49 50 switch (sheet.getRange(lastRow, 19).getValue()) { 51 case "": 52 sendForm1(e);//どうしたらここを実行できますか? 53 break; 54 default: 55 sendForm2(e); 56 break; 57 } 58}

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

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

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

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

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

takasima20

2016/04/24 08:03

「まったく動きません」とはどういう状況でしょうか? 引数が設定されていないという不具合は分かりますが、 特に問題となるようなところはないような…
SASAKI_APPL

2016/04/24 08:06

トリガーをfunction sendForm1に設定する際は、sendForm1が実行されますが、トリガーをfunction Startに設定してもsendForm1やsendForm2が実行されないということです。
guest

回答3

0

ベストアンサー

function sendForm1(e)ですがeを利用していないようにみえます。
ですので、function sendForm1()とすれば、動くと思います。

投稿2016/04/24 07:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

SASAKI_APPL

2016/04/24 08:02

回答ありがとうございます! eを入れて試してみましたが、やはり変わりませんね、、、 何が原因なんでしょうか、、、
退会済みユーザー

退会済みユーザー

2016/04/24 08:04

javascriptの場合、下記の場合でも動きますね。ですのでこれでは解決しないですね。失礼しました。 function sendForm1(e) { } function Start() { this.sendForm1(); }
退会済みユーザー

退会済みユーザー

2016/04/24 08:06

まずはStart自身が本当に動いているのか検証する必要があると思います。 下記のようにしてメッセージは表示されますか? function Start() { alert('hoge'); // これを追加 }
退会済みユーザー

退会済みユーザー

2016/04/24 08:11

情報の追加を読んで補足です。 sendForm1をトリガーにしたときに正常に動いているのであれば、 startもstart(e)とすればどうでしょうか?
SASAKI_APPL

2016/04/24 08:38

あ!start(e)にしたらできました!!!!!! ありがとうございます!!!
guest

0

やったことないのでよくわかりませんが…
別個に登録する必要があるようです

http://itami.info/tech/14-memorandum/188-googleappsscriptincludfunctions.html

投稿2016/04/24 08:19

takasima20

総合スコア7458

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

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

kei344

2016/04/24 08:22

それはライブラリなど、関数をまとめたものを共有するときの仕組みなので、今回の質問内容に関してはとりあえず不要ですよ。あとで再利用するときに便利です。(設定が特殊だったりで一苦労しますが)
takasima20

2016/04/24 08:35

おっと失礼。突っ込みありがとうございます。>kei344さん
SASAKI_APPL

2016/04/24 08:40

参考にはなりませんでしたが、皆さんのご協力のおかげで解決しました!ありがとうございます!
guest

0

こういう感じで状況を確認されてみてはいかがでしょう。

JavaScript

1 2 3try { 4 Logger.log( sheet.getRange( lastRow, 19 ).getValue() ); 5 if ( "" == sheet.getRange( lastRow, 19 ).getValue() ) { 6 sendForm1(); 7 } else { 8 sendForm2(); 9 } 10} catch( e ) { 11 Logger.log( 'error!' ); 12 Logger.log( e ); 13}; // End try

また、sendForm1(); の箇所を sendForm1(e); とする場合、e が定義されていないというエラーが起こる可能性があるため、お気をつけください。function sendForm1(e) のほうはそのままでも大丈夫です。

投稿2016/04/24 08:18

kei344

総合スコア69407

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

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

SASAKI_APPL

2016/04/24 08:39

start(e)にして、 switch文をkei344さんのif文に変えたらできました! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問