function onFormSubmit() {
ss = SpreadsheetApp.getActiveSpreadsheet();
var fRes1 = ss.getSheetByName("Form Responses 1");
function sendEmail()
{
var emailManager = "";
var emailQuality = "";
var sheet = SpreadsheetApp.getActiveSheet();
var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];
var Row = sheet.getRange(sheet.getLastRow(),1,1,sheet.getLastColumn()).getValues()[0]; //Last Row
var message = "";
var subject = Row[2]; //Subject is on column 3
for(var i in headers)
if(Row[i] !== "")
{
message += headers[i] + Row[i] + "/n/n"; // Headers and Last Row will be the message
}
// Improvement Suggestion
if(Row[2] === 'Improvement suggestion')
{
emailManager = Row[10]; //column where the header is called "Manager Email"
}
// Incident
else if(Row[2] === 'Incident')
{
emailManager = Row[21]; //column where the header is called "Who should be informed?"
if(Row[11] === "Option1") //
{
emailQuality = "emailaddress1@address.com";
}
else if (Row[11] === "Option2")
{
emailQuality = "emailaddress1@address.com";
}
}
// Send the email
MailApp.sendEmail(emailQuality + "" + emailManager, subject, message);
}
sendEmail();
}
是否有更通用的方法从表格提交信息的电子表格中提取信息?
而不是使用如下数字:
emailManager = Row[10];
subject = Row[2];
if(Row[11] === "Option1")
因为如果有人更改了表单,将添加或删除新列,然后我将不得不使用另一个数字。 是否有更通用的方法来了解哪一列包含哪些选项?
答案 0 :(得分:1)
有多种方法,每种方法都有自己的复杂性和实用性。所有这些都允许列在任何地方,因此可以扩展表单。
如果您不在代码中执行此操作,则可以使用
访问行r
的值
var resultT = a[r][a[0].indexOf("Col2")] // Access "Col2" of row r
如果您更频繁地执行此操作并希望避免索引(也可能在计算上变得非常昂贵),您可以创建一个包含标题名称和列信息的Object:
var I = {}; // Indexing object
for (var i = 0; i < a[0].length; i++) { // Assign indices to headers
I[a[0][i]] = i;
}
var result = a[r][I["Col2"]] // Access "Col2" of row r
或者在你的情况下
subject = Row[2];
var result = subject[I["Option1"]];
最容易使用的选项但设置起来非常繁琐,是在Index对象上进行扩展而只是追加转换数据数组的元素而不是索引列。
var table = {}
for (var row = 0; row < a.length; row++) {
for (var col = 0; col < a[row].length; col++) {
if (row == 0) {
table[a[0][col]] = [];
} else {
table[a[0][col]].push(a[row][col]);
}
}
}
var result = table["Col2"][r-1];
您现在有一个带有列标题的对象,每个对象都包含该列的数组(请注意,这不会改变索引,因为标题不再计为行) 这要求我们至少访问一次每个元素,并且需要执行大量工作。如果你要经常访问这些元素,这是值得的 我个人推荐选项2。