首页 > 解决方案 > 如何从文本框中获取用户输入并导入到 google code.gs 文件中?

问题描述

我正在尝试制作一个简单的流行 HTML 可编辑自动电子邮件脚本,用于向学生和家长发送有关丢失作业的电子邮件。我遇到的第一个问题是从我创建的 HTML 弹出窗口中获取电子邮件主题标题。

我已经尝试过不同的形式。并得到。线。它似乎没有抓住任何东西,代码总是在我的日志中崩溃:

var subject = form.subject;  // Title of Email with class name 

或者

var subject = index.html().getEmailSubject();

代码.gs

// Send Email Script for Edit Email Section Popup HTML (using check boxes, etc.)

 function sendEmail() {

   var ui = SpreadsheetApp.getUi(); // Same variations.
   var result = ui.alert(
     'Send Emails',
     'Are you sure you want to send missing assignment emails?',
      ui.ButtonSet.YES_NO);

   // Process the user's response.
  if (result == ui.Button.YES) {
    // User clicked "Yes".
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Missing Student Information");
    Logger.log("test 1");
    var email_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Template");
    Logger.log("test 2");
    var email_data = email_sheet.getDataRange().getValues();
    Logger.log("test 3");

  var startRow = 2;  // First row of data to process
  var numRows = sheet.getDataRange().getNumRows();   // Number of rows to process
    Logger.log(numRows);
   // Fetch the range of cells A2:(numRows)3
  var dataRange = sheet.getRange(startRow, 1, numRows, 6);

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < numRows;i++) {
    var row = data[i];
    var student_name = row[0];     // Gets student name
    var class = row[1];            // Gets class name
    var student_email = row[2];    // Gets student email address
    var parent_email = row[3];     // Gets parent email address
    var missing = row[4];          // Gets number of missing assignments
    var assign_list = row[5];

    Logger.log("Before get email subject header.");

    var subject = index.html().getEmailSubject();  // Title of Email with class name 
    Logger.log("starting "+student_name+" "+missing+assign_list); 

    Logger.log("After get email subject header.");

索引.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
      // Prevent forms from submitting.
      function preventFormSubmit() {
        var forms = document.querySelectorAll('form');
        for (var i = 0; i < forms.length; i++) {
          forms[i].addEventListener('submit', function(event) {
            event.preventDefault();
          });
        }
      }
      window.addEventListener('load', preventFormSubmit);

      function handleFormSubmit(formObject) {
        google.script.run.withSuccessHandler(updateUrl).SendEmails(formObject);
        google.script.host.close();
      }
      function updateUrl(url) {
        var div = document.getElementById('output');
        div.innerHTML = '<a href="' + url + '">Got it!</a>';
      }
      function setDefaultSubject(subject) {
        if (subject != null && subject != "") {
          var form = document.getElementById('myForm');
          form.Subject.value = subject;
        }
      }
      function setDefaultBody(body) {
        if (body != null && body != "") {
          var form = document.getElementById('myForm');
          form.Body.value = body;
        }
      }
      google.script.run
        .withSuccessHandler(setDefaultBody)
        .getEmailBody();
      google.script.run
        .withSuccessHandler(setDefaultSubject)
        .getEmailSubject();
    </script>
  </head>
  <body>
  <input type="checkbox" name="send_Students" checked="checked" /> Email Students <input type="checkbox" name="send_Parents" checked="checked" /> Email Parents <br/><br/>
    <form id="myForm" onsubmit="handleFormSubmit(this)">
      Email Subject: <input style="width:500px" name="Subject" type="text" value="Current Missing Assignments List"/>
      <br/name="Subject" type="text" value="Current Missing Assignments List"/>
      <br/>
      Email Body: <br/>
      <textarea name="Body" style="width:750px; height:400px">

我希望它只采用 Index.html 中的表单并将其设为电子邮件主题行。

我将尝试从谷歌表格中插入所有信息的其余信息。

标签: google-apps-scriptgoogle-sheets

解决方案


index.html 的内容似乎比必要的复杂。你说你只想要电子邮件主题行,所以我删除了 index.html 并调整了 ui 界面以请求电子邮件行。

“主题”变量也在您的循环中声明,这意味着它被多次调用。这是不必要的,我已将其移至循环之前的一行。


// Send Email Script for Edit Email Section Popup HTML (using check boxes, etc.)

 function so5714849501() {

  var ui = SpreadsheetApp.getUi(); // Same variations.
  var result = ui.alert(
  'Send Emails',
  'Are you sure you want to send missing assignment emails?',
  ui.ButtonSet.YES_NO);

  // Process the user's response.
  if (result == ui.Button.YES) {
    // User clicked "Yes".
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Missing Student Information");
    //Logger.log("test 1");
    var email_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Template");
    //Logger.log("test 2");
    var email_data = email_sheet.getDataRange().getValues();
    //Logger.log("test 3");

    var startRow = 2;  // First row of data to process
    var numRows = sheet.getDataRange().getNumRows();   // Number of rows to process
    //Logger.log(numRows);

    // get subject line from prompt function
    var subject = showEmailPrompt();
    if (subject == undefined){
      Logger.log("DEBUG: No subject received; stopping the process.");   
      return;
    }
    else
    {
      Logger.log("DEBUG: the subject from the prompt is "+subject);    
    }

    // Fetch the range of cells A2:(numRows)3
    var dataRange = sheet.getRange(startRow, 1, numRows, 6);

    // Fetch values for each row in the Range.
    var data = dataRange.getValues();
    for (var i = 0; i < numRows;i++) {
      var row = data[i];
      var student_name = row[0];     // Gets student name
      var class = row[1];            // Gets class name
      var student_email = row[2];    // Gets student email address
      var parent_email = row[3];     // Gets parent email address
      var missing = row[4];          // Gets number of missing assignments
      var assign_list = row[5];
      Logger.log("DEBUG: name:"+student_name+", class:"+class+", student email: "+student_email+", parent  email: "+parent_email+", number missing:"+missing+", assignments:"+assign_list);
    }
  }
 }

 function showEmailPrompt() {
  var ui = SpreadsheetApp.getUi(); // Same variations.

  var result = ui.prompt(
      'Missing Assignments Email',
      'Please enter a subject or Cancel:',
      ui.ButtonSet.OK_CANCEL);

  // Process the user's response.
  var button = result.getSelectedButton();
  var text = result.getResponseText();
  if (button == ui.Button.OK) {
    // User clicked "OK".
    ui.alert('The Email subject will be ' + text + '.');
    return text;
  } else if (button == ui.Button.CANCEL) {
    // User clicked "Cancel".
    ui.alert('You cancelled the process.');
    return;
  } else if (button == ui.Button.CLOSE) {
    // User clicked X in the title bar.
    ui.alert('You closed the dialog.');
    return;
  }
}

推荐阅读