ホーム>source

このコードはうまくいきます! フォームが送信されると、作成したテンプレートが自動入力され、メールに送信されます。 ユーザーがフォームに空のフィールドを残さない限り、これはうまく機能します。 その場合、自動入力の順序が間違っています... とにかく、ユーザーがフィールドを空白のままにすることにした場合、テキスト(たとえば、「指定されていません」)を自動的に含める方法はありますか? ユーザーがテキストを入力すると、すばらしいです。そうでない場合は、「指定されていません」と表示します。

助けてください!

<前>ウィズウィズ // Requisition Form // Get template from Google Docs and name it var docTemplate = "the tamplate I created"; var docName = "Requisition Form"; // When Form Gets submitted function onFormSubmit(e) { //Get information from form and set as variables var email_address = "myemail"; var business_entity = e.values[2]; var rotation = e.values[3]; var category = e.values[4]; var city = e.values[5]; var state = e.values[6]; var environment = e.values[7]; var date = e.values[8]; var recurring = e.values[9]; var supervisor = e.values[10]; var phone = e.values[11]; var email = e.values[12]; var background = e.values[13]; if (e.values[13]=null) { e.values[13]='not specified';} //this does not work! var skills = e.values[14]; if (e.values[14]=null) { e.values[14]='not specified';} //this does not work! var development = e.values[15]; var knowledge = e.values[16]; var responsibilities = e.values[17]; // Get document template, copy it as a new temp doc, and save the Doc’s id var copyId = DocsList.getFileById(docTemplate) .makeCopy(docName+' for '+supervisor) .getId(); // Open the temporary document var copyDoc = DocumentApp.openById(copyId); // Get the document’s body section var copyBody = copyDoc.getActiveSection(); // Replace place holder keys, in our google doc template copyBody.replaceText('keyBU', business_entity); copyBody.replaceText('keyRotation', rotation); copyBody.replaceText('keyCategory', category); copyBody.replaceText('keyCity', city); copyBody.replaceText('keyState', state); copyBody.replaceText('keyEnvironment', environment); copyBody.replaceText('keyDate', date); copyBody.replaceText('keyRecurring', recurring); copyBody.replaceText('keySupervisor', supervisor); copyBody.replaceText('keyPhone', phone); copyBody.replaceText('keyEmail', email); copyBody.replaceText('keyBackground', background); copyBody.replaceText('keySkills', skills); copyBody.replaceText('keyDevelopment', development); copyBody.replaceText('keyKnowledge', knowledge); copyBody.replaceText('keyResponsibilities', responsibilities); // Save and close the temporary document copyDoc.saveAndClose(); // Convert temporary document to PDF var pdf = DocsList.getFileById(copyId).getAs("application/pdf"); // Attach PDF and send the email var subject = "Requisition Form"; var body = "Here is a Requisition Form from " + supervisor + ""; MailApp.sendEmail(email_address, subject, body, {htmlBody: body, attachments: pdf}); // Delete temp file DocsList.getFileById(copyId).setTrashed(true); }
あなたの答え
  • 解決した方法 # 1

    インデックスの代わりに名前付きの値を使用して応答を取得します...一部のフィールドが空のままであっても、起こり得る混乱はありません。

    こちらのドキュメントをご覧ください。

    質問のタイトルを正確に知っているように見えるため、FormAppメソッドgetTitle()を使用して項目名を取得するか、スクリプトに直接名前を入力できます。

    例:

    <前>ウィズウィズ
    編集2:

    (最初の編集は非常に似ていましたが、空のフィールドの検出が適切に記述されていないことに気付きました。 以下のコードではコンパクトなIFフォームを使用して、コードを簡略化しました。

    以下は e.namedValues {'First Name': ['Jane'], 'Timestamp': ['6/7/2015 20:54:13'], 'Last Name': ['Doe']} An object containing the question names and values from the form submission を使用する完全な例です   namedValues の代わりに 。

    ところで、空のフィールドが2つあるフォーム送信をシミュレートするテスト関数を追加しました。(この投稿(Mogsdad)から借りた元のアイデア:GASでトリガー関数をテストするにはどうすればよいですか?)

    <前>ウィズウィズ

  • 解決した方法 # 2

    同様の問題がありました。 lastResponsesをeに置き換えることが可能であるべきです

    <前>ウィズウィズ indexed values

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ python - データを分類してツリーのような構造にする方法