ホーム>source

代替住所を要求するがフィールドを必要としないスクリプトがあります。空白のままになっているすべてのフィールドで、電子メール応答は「未定義」と言っています。

App Scriptsが空白のままにしたフィールドに与える応答をカスタマイズする方法はありますか。実際には、応答メールでそれらを空のままにするか、「未定義」ではなく「応答なし」という単語を使用しますか?

Googleフォームの送信から一連の変数を作成しています。

<前>ウィズウィズ

次に、変数データをメールで送信します。ユーザーがすべてのフィールドに入力すると、すべてが正常に機能しますが、一部のフィールドは必須ではありません。フィールドを空白のままにすると、スクリプトはデータを電子メールの適切な場所に配置しません。

これらの変数の下に何を追加すれば、誰かが質問のいずれかに答えない場合に「未回答」と表示されますか?

最新の編集はここから始まります:

私はセルジュのアプローチ、多くの異なる方法を試しましたが、それを正しく行うことができません。

これは一種の動作ですが、フォームフィールドに必要な変数を「未定義」に設定するようです。

これはシートのコピーへのリンクです。スクリプトを見て、編集してください。誰かがそれを正しく行うことができれば、すべてここに戻って、他の人が学ぶために答えを残します。

https://docs.google.com/spreadsheets/d/1RkAdssA9dwef_ZeknAlE1rZKEYlO0xs-cJZQir0-9jg/edit?usp=sharing

これが完全な定義のスクリプトです。

<前>ウィズウィズ function onFormSubmit(e) { var toAddress = e.values[1]; var myFirstName = e.values[2]; var myLastName = e.values[3]; var myCertifications = e.values[4]; var myEmployer = e.values[5]; var myPhoneNumber = e.values[6]; var myAltPhoneNumber = e.values[7]; var myFax = e.values[8]; var myBirthday = e.values[9]; var myWorkAddy = e.values[10]; var myWorkAddy2 = e.values[11]; var myWorkCity = e.values[12]; var myWorkState = e.values[13]; var myWorkZip = e.values[14]; var myAltAddy = e.values[15]; var myAltAddy2 = e.values[16]; var myAltCity = e.values[17]; var myAltState = e.values[18]; var myAltZip = e.values[19]; var mySnailPref = e.values[20]; var myQuestions = e.values[21];
あなたの答え
  • 解決した方法 # 1

    以下の例のように、すべてのアイテムに短い形式の条件を使用できます。

    <前>ウィズウィズ

    この条件付き操作に関するドキュメントは、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operatorを参照してください。


    edit -suggestion to try-:アイデアは、 function myFunction() { var e = {}; e.values='';// these 2 lines only to create test conditions... // var test = e.values[0]; // uncomment this line to test "normal" behavior without condition var test = e.values[0]!=null? e.values[0] : 'no answer';// example with condition Logger.log(test);// see result in logger } の空の文字列を置き換えることです  事前定義された文字列(オブジェクトを文字列に変換した後にそれを行います)を使用して、オブジェクトに解析します。 (私はそれをテストしませんでした) コードは次のようになります。

    <前>ウィズウィズ

    (編集注:これはこのコンテキストでは機能しません... doGet/doPost構造を使用するUiAppフォームで使用できますが、Googleフォームでは使用できません...時間の浪費のため申し訳ありません)


    編集2

    うまくいきましたが、私はあなたの最初のアプローチを変更しなければなりませんでした... インデックスで値を取得する代わりに( e object )アイテム名を使用しています...

    コードは次のようになります。

    <前>ウィズウィズ

    注:アイテムの説明で名前が重複しないようにフォームを編集する必要があります...現在「アドレス」、「zip」などの2つのフィールドがあるため、適切に検出できませんが、そうではありません。うまくいかないようにしてください!

    また、そうする場合は、スプレッドシートからフォームのリンクを解除し、後で再リンクして、シートの列が新しいアイテムのタイトルに対応し、フォームの応答がスクリプトの定義と一致するようにする必要があります(また、もちろん、同じスプレッドシートを再利用しますが、新しいシートを使用します)。

    完全に機能する更新されたフォームへのリンクをコメントに追加しました。

    実際、私はメールの構成部分も変更し、htmlバージョンから直接テキストバージョンを取得しました( function onFormSubmit(e) { var e_string = JSON.stringify(e); e=JSON.parse(e_string.replace(/""/g,'not answered')); var toAddress = e.values[1]; var myFirstName = e.values[2]; var myLastName = e.values[3]; //.... continue your function unchanged } のみを使用したため)  タグ、私は単にこれらのタグを values[n] で置き換えました  プレーンテキストバージョンを取得する)コードを少し短くします。

    また、スプレッドシートの自動更新も追加しました(別の投稿で、シートの空のセルにもマークを付けたいと思っていました)ので、空のセルに「回答なし」と入力しました。

    さて、私は今修正を終えていると思います!楽しい ;)

  • 解決した方法 # 2

    同じ問題があり、より短い解決策が見つかりました:

    <前>ウィズウィズ function onFormSubmit(e) { var items = FormApp.openById('1r67Ny2hWl5Su2wtzKKoT5a4ITE1FkKfJigZx0hMXvkU').getItems(); for(var n = 0 ; n < items.length; n++){ Logger.log(n+' - '+items[n].getTitle()+' == ? '+e.namedValues[items[n].getTitle()]); if(e.namedValues[items[n].getTitle()]==null){e.namedValues[items[n].getTitle()] = 'no answer'} } var toAddress = e.namedValues[items[0].getTitle()]; var myFirstName = e.namedValues[items[1].getTitle()]; var myLastName = e.namedValues[items[2].getTitle()]; var myCertifications = e.namedValues[items[3].getTitle()]; var myEmployer = e.namedValues[items[4].getTitle()]; var myPhoneNumber = e.namedValues[items[5].getTitle()]; var myAltPhoneNumber = e.namedValues[items[6].getTitle()]; var myFax = e.namedValues[items[7].getTitle()]; var myBirthday = e.namedValues[items[8].getTitle()]; var myWorkAddy = e.namedValues[items[11].getTitle()]; var myWorkAddy2 = e.namedValues[items[12].getTitle()]; var myWorkCity = e.namedValues[items[13].getTitle()]; var myWorkState = e.namedValues[items[14].getTitle()]; var myWorkZip = e.namedValues[items[15].getTitle()]; var myAltAddy = e.namedValues[items[17].getTitle()]; var myAltAddy2 = e.namedValues[items[18].getTitle()]; var myAltCity = e.namedValues[items[19].getTitle()]; var myAltState = e.namedValues[items[20].getTitle()]; var myAltZip = e.namedValues[items[21].getTitle()]; var mySnailPref = e.namedValues[items[23].getTitle()]; var myQuestions = e.namedValues[items[24].getTitle()]; var emailreplyTo = "dave@davelalande.com" ; var subject = "Membership Application"; var htmlBody = myFirstName +"," + "<br><br>Thank you for your Missouri State Tumor Registrars' Association (MoSTRA) Registration. " + "<br>The information we received is as follows." + "<br><br>First Name: " + myFirstName + "<br>Last Name: " + myLastName + "<br>Current Certifications: " + myCertifications + "<br>Employer: " + myEmployer + "<br>Phone Number: " + myPhoneNumber + "<br>Alternative Phone Number: " + myAltPhoneNumber + "<br>Fax: " + myFax + "<br>Birthday and Birth Month: " + myBirthday + "<br>Work Address: " + myWorkAddy + "<br>Work Address 2: " + myWorkAddy2 + "<br>Work City: " + myWorkCity + "<br>Work City: " + myWorkState + "<br>Work City: " + myWorkZip + "<br>Alternative Address: " + myAltAddy + "<br>Alternative Address 2: " + myAltAddy2 + "<br>Alternative Address City: " + myAltCity + "<br>Alternative Address State: " + myAltState + "<br>Alternative Address ZIP: " + myAltZip + "<br>Snail Mail Address Preference: " + mySnailPref + "<br>Your Question or Comment: " + myQuestions + "<br><br>Please print this page and mail it with a check in the amount of $25.00, payable to the Association. " + "<br><br>Mail it to: " + "<br><br>Dave Lalande " + "<br>123 Main " + "<br>Suite 240 " + "<br>Any Town, MO 65201 " + "<br><br>Your membership will become active when the dues have been received and processed. " + "<br>You will receive an email notifying you when your membership has been activated. Welcome to the Association! " + "<br><br>If you have questions please email me at dave@davelalande.com. "; var emailBody = htmlBody.replace(/<br>/g,'\n'); var optAdvancedArgs = {replyTo:emailreplyTo, name: "Membership Chair", htmlBody: htmlBody}; Logger.log(emailBody); MailApp.sendEmail(toAddress, subject, emailBody, optAdvancedArgs); var data = SpreadsheetApp.openById('1hnnpK5MAUET8QHIezFP9LskHf9Q-SMNwDpNkIpcWGbM').getSheets()[0].getDataRange().getValues(); for (var r in data){ for(var c in data[0]){ if(data[r][c]==''){data[r][c]='no answer'} } } SpreadsheetApp.openById('1hnnpK5MAUET8QHIezFP9LskHf9Q-SMNwDpNkIpcWGbM').getSheets()[0].getDataRange().setValues(data); }

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ Rails 5では、メンバーフィールドにファインダーの「いいね」クエリをどのように記述しますか?