我搜索并尝试使用我能找到的东西,但我被卡住了。我正在尝试创建一个脚本,用于扫描Google表格(大约30张)以查找新输入且低于60%的值。然后,我希望脚本通过电子邮件向我发送当前数据行的第2列(学生姓名),第4列(教师姓名)中的数据以及百分比(测试分数)低于60%(例如克拉克,约翰夫人布朗56.64%)。我是Java脚本的新手,但一直在努力学习。
这是我到目前为止的脚本。它找到正确的工作表没有问题。它也会给我发电子邮件(错误的信息,但它仍然有效)。但是有一些事情我坚持下去。就像我知道我必须设置某种onEdit触发器,以便它只发送新输入的分数,但我不知道在哪里放或者如何做到这一点。我也知道我的dataRange代码对我来说似乎不对,if语句似乎也错了。我不知道如何指定"低于60%"。 我是一名技术老师,使用Google Drive为我们学校建立了一个庞大的数据系统。我希望每当学生需要特定评估的帮助时,主数据表会自动通过电子邮件发送给校长。你可以给我的任何帮助将不胜感激! 非常感谢你们所有的时间,我喜欢花时间在这里向大家学习 布兰登
Here is a link to an example of the data spreadsheet we use
下面的Choppy脚本
function sendEmail() {
var spreadsheet = SpreadsheetApp.openById('spreadsheet ID');
/// The ID of the data spreadshfeet
var sheet = spreadsheet.getSheets(); // gets all sheets
var startRow = 3; // Third row of data to process
var numRows = 40; // Number of rows to process
var dataRange = sheet.getRange(startRow, 10, numRows, 50); // Start row 3 column 10, and stop row 40, column 50
// Fetch values for each row in the Range.
var data = dataRange.getValues();
//Browser.msgBox(data)
for (i in data) {
var row = data[i];
if (dataRange.getValues() <= .60); {
var emailAddress = "my email";
var message = row[2]; // Second column
var subject = "ALERT - Assessment score below 60% inputted.";
MailApp.sendEmail(emailAddress, subject, message);
// Browser.msgBox(emailAddress)
}
}
}
&#13;
function emailAlert(e) {
var range = e.range;
if (range.getColumn() >= 10) { // Only check column I and up
var editedSheet = e.source.getActiveSheet();
var editedRow = range.getRow();
var value = range.getValue();
if (value !== 'undefined') {
if (value < 0.6) {
var studentData = editedSheet.getRange(editedRow, 1, 1, 9).getValues();
Logger.log(
'StudentId: ' + studentData[0][0] +
'\n Name: ' + studentData[0][1] +
'\n HR: ' + studentData[0][2] +
'\n Teacher: ' + studentData[0][3] +
'\n Grade: ' + studentData[0][4] +
'\n Race: ' + studentData[0][5] +
'\n G: ' + studentData[0][6] +
'\n Ed: ' + studentData[0][7] +
'\n AVG: ' + studentData[0][8]);
var emailAddress = "brandon.mause@sleschool.org";
var message = Test
var subject = "ALERT - Assessment score below 60% inputted.";
MailApp.sendEmail(emailAddress, subject, message);
// Send email..
}
}
}
}
我添加了上面的新代码,并且可安装的触发器处于活动状态。我仍然无法使电子邮件功能正常工作。有任何想法吗? 感谢...
答案 0 :(得分:0)
听起来您可以使用onEdit
触发器来解决问题。但是,由于您要发送电子邮件,因此您需要手动添加触发器,因为该功能需要授权才能发送电子邮件。
试试这个:
function assessmentOnEdit(e) {
var range = e.range;
if (range.getColumn() >= 10) { // Only check column I and up
var editedSheet = e.source.getActiveSheet();
var editedRow = range.getRow();
var value = range.getValue();
if (typeof value === 'number') {
if (value < 0.6) {
var studentData = editedSheet.getRange(editedRow, 1, 1, 9).getValues();
var message = 'Assessment score: ' + Math.round((value * 100) * 10) / 10 + ' %' +
'\nStudentId: ' + studentData[0][0] +
'\nName: ' + studentData[0][1] +
'\nHR: ' + studentData[0][2] +
'\nTeacher: ' + studentData[0][3] +
'\nGrade: ' + studentData[0][4] +
'\nRace: ' + studentData[0][5] +
'\nG: ' + studentData[0][6] +
'\nEd: ' + studentData[0][7] +
'\nAVG: ' + Math.round((studentData[0][8] * 100) * 10) / 10 + ' %';
var emailAddress = 'john.doe@example.com';
var subject = 'ALERT - Assessment score below 60% inputted.';
MailApp.sendEmail(emailAddress, subject, message);
}
}
}
}
查看google referance页面以获取有关触发器的更多信息:https://developers.google.com/apps-script/guides/triggers/events
编辑
由于您要使用IMPORTRANGE
,onEdit
触发器不会触发。尝试使用下面的功能,并使用此功能onChange
代替onEdit
。
function assessmentOnChange(e) {
var editedSheet = e.source.getActiveSheet();
var scriptProperties = PropertiesService.getScriptProperties();
var propertyKey = 'currentColumn';
var currentColumn = scriptProperties.getProperty(propertyKey);
if (currentColumn === null) {
currentColumn = 14; //Fisrt Empty column is N
}
var table = editedSheet.getRange(3, Number(currentColumn), editedSheet.getLastRow(), editedSheet.getLastColumn()).getValues(),
rowNumber = 3,
valuesToProcess = [];
table.forEach(function(row) {
var column = 0;
row.forEach(function(cell) {
if (typeof cell === 'number') {
valuesToProcess.push({
value: cell,
row: rowNumber,
column: Number(currentColumn) + column
})
}
column++;
});
rowNumber++;
});
var maxColumn = Number(currentColumn);
for (var i in valuesToProcess) {
assessmentOnEdit({
source: e.source,
range: {
getRow: function() {
return valuesToProcess[i].row
},
getValue: function() {
return valuesToProcess[i].value
},
getColumn: function() {
return valuesToProcess[i].column
}
}
});
if (valuesToProcess[i].column > maxColumn) {
maxColumn = valuesToProcess[i].column;
}
}
scriptProperties.setProperty(propertyKey, maxColumn + 1);
}