google-apps-script - 如何从文本框中获取用户输入并导入到 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 中的表单并将其设为电子邮件主题行。
我将尝试从谷歌表格中插入所有信息的其余信息。
解决方案
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;
}
}
推荐阅读
- javascript - PHP 和 Javascript 问题。函数总是返回最后一个值
- bitcoinj - Bitcoinj get transactions from blockchain
- powershell - PowerShell 读取 csv 文件并相应地创建文件
- c++ - 如何重构重复的控制结构?
- r - 如何从知道相机像素分辨率、焦距和高度的照片开始计算 R 中的叶面积?
- python - 无法解析树莓派上的主机地址
- javascript - [Vue 警告]:渲染错误:“TypeError:无法读取属性 'id' of null”
- c# - 在 c# 和 c++ 之间将 double 类型的二维多维数组作为输入和输出的 pinvoke 编组
- azure - 无法在 Azure B2C 注册页面中执行注册属性重新排序
- java - 将 weka 与 android 一起使用时出现错误