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

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

ただいまの
回答率

90.50%

  • JavaScript

    16903questions

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

  • Google Apps Script

    886questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 776

SASAKI_APPL

score 73

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

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

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

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

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

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

function sendForm1(e){
 
    // 件名、本文
    var subject = "[SOASOA]"//件名
    var body = "\n------------------------------------------------------------"//本文
    var sheet = SpreadsheetApp.getActiveSheet();
    var lastRow = sheet.getLastRow();
 
    var to    = "exanmple@gmail.com";

  MailApp.sendEmail(to, subject +"[資料番号:"+g+"]"+name1 , "[資料番号:"+g+"]" + body);
}

function sendForm2(e){
 
 //ここに処理2個目

  MailApp.sendEmail(to, subject +"[資料番号:"+g+"]"+name1 , "[資料番号:"+g+"]" + body);
}

/*
———————————————————————————————————————————
この下が問題の部分です!!!
———————————————————————————————————————————
*/

function Start(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
 
  // 入力カラム名の指定
  var PRE='\n[';
  var AFT=']\n';
  var SYOKO = '証拠資料の種類'; //フォーム作成時に設定した項目名
  var WHEN3= sheet.getRange("B1").getValue();//'資料年月日'
  var BOOKNAME = '書名・新聞名';
  var SITENAME = 'サイト名';
  var EDITOR = '編集者';
  var PAGENUM = '引用ページ (1件目)';
  var GENNUM = '原本番号';
  var HONBUN = '引用本文 (1件目)'; //フォーム作成時に設定した項目名
  var LINK = 'URL'; //フォーム作成時に設定した項目名
  var RESPECT = '肩書き';
  var WRITER = '著者名';
  var EVIT = '資料タイトル (1件目)'; //フォーム作成時に設定した項目名
  var WHO = '投稿者'; //フォーム作成時に設定した項目名



      switch (sheet.getRange(lastRow, 19).getValue()) {
    case "":
    sendForm1(e);//どうしたらここを実行できますか?
    break;
    default:
    sendForm2(e);
    break;
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • takasima20

    2016/04/24 17:03

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

    キャンセル

  • SASAKI_APPL

    2016/04/24 17:06

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

    キャンセル

回答 3

checkベストアンサー

+2

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/04/24 17:02

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

    キャンセル

  • 2016/04/24 17:04

    javascriptの場合、下記の場合でも動きますね。ですのでこれでは解決しないですね。失礼しました。
    function sendForm1(e)
    {
    }

    function Start()
    {
    this.sendForm1();
    }

    キャンセル

  • 2016/04/24 17:06

    まずはStart自身が本当に動いているのか検証する必要があると思います。
    下記のようにしてメッセージは表示されますか?

    function Start()
    {
    alert('hoge'); // これを追加
    }

    キャンセル

  • 2016/04/24 17:11

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

    キャンセル

  • 2016/04/24 17:38

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

    キャンセル

0

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

try {
    Logger.log( sheet.getRange( lastRow, 19 ).getValue() );
    if ( "" == sheet.getRange( lastRow, 19 ).getValue() ) {
        sendForm1();
    } else {
        sendForm2();
    }
} catch( e ) {
    Logger.log( 'error!' );
    Logger.log( e );
};    // End try

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/04/24 17:39

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

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/04/24 17:22

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

    キャンセル

  • 2016/04/24 17:35

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

    キャンセル

  • 2016/04/24 17:40

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

    キャンセル

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

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

関連した質問

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

  • JavaScript

    16903questions

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

  • Google Apps Script

    886questions

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