问题描述
这里的菜鸟程序员。
我正在开发一个 gsheets 脚本,它应该从谷歌表单接收答案(将答案提交到谷歌表格表格),将其格式化为电子邮件并邮寄给其他人。
我已经编写了将标题和表单提交行放入一个 javascript 对象的代码,但我无法弄清楚为什么我不能使用该对象的属性之一作为电子邮件的主题,我收到了电子邮件,但主题总是“未定义邮件测试”。
注意:ifEdit 方法作为 OnEdit 事件的 Installed 事件侦听器触发。
/* DEFINE GLOBAL VARIABLES */
function globalVariables(){
let vararray = {
spreadsheetId : 's0mer4nd0mIdnumb3r',sheetID : '0',sheetName : 'sheetname'
};
return vararray;
}
function ifEdit(event) {
let range = event.range;//The range of cells edited
let columnOfCellEdited = range.getColumn();//Get column number
let emailAddress = "generic@email.com.zb";
let message = JSON.stringify(
convertToObjects(
getSheetHeaderAsArray(range.getSheet()),getRowAsArray(range.getRow(),range.getSheet())
)).toString();
let subject = "Mail test " + message["MATERIAL"];
if (columnOfCellEdited === 1 && range.getSheet().getName() == globalVariables().sheetName) {// Column 1 is Column A
range.setNote('Edited at +' + new Date());
Logger.log(emailAddress + subject + message);
MailApp.sendEmail(emailAddress,subject,message);
};
}
/** AUXILIARY **/
function convertToObjects(headers,rows){
let result = {};
headers[0].forEach((headers,i) => result[headers] = rows[0][i]);
console.log(result);
return result;
}
function getSheetHeaderAsArray(sheet){
let header = sheet.getRange(1,1,14).getValues();
//Logger.log(header);
return header;
}
function getRowAsArray(editedRowNum,sheet){
let rowArray = sheet.getRange(editedRowNum,14).getValues();
//Logger.log(rowArray);
return rowArray;
}
解决方法
我认为这可能与您想要实现的目标很接近:
function ifEdit(e) {
const sh=e.range.getSheet();
const emailAddress = "generic@email.com.zb";
const hA=sh.getRange(1,1,sh.getLastColumn()).getValues()[0];
const rA=sh.getRange(e.range.rowStart,sh.getLastColumn()).getValues()[0];
let mObj = {};
hA.forEach((h,i)=>{mObj[h]=rA[i];});
const message = hA.join(',') + '\n' + rA.join(',');
let subject = "Mail test " + mObj["MATERIAL"];
if (e.range.rowStart == 1 && range.getSheet().getName() == globalVariables().sheetName) {// Column 1 is Column A
range.setNote('Edited at +' + new Date());
Logger.log(emailAddress + subject + message);
MailApp.sendEmail(emailAddress,subject,message);
};
}
但不幸的是,我相信您期望来自 onFormSubmit 触发器的编辑触发器,而这不会发生。