微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MailApp+SpreadsheetApp - 将对象属性作为电子邮件主题传递

如何解决MailApp+SpreadsheetApp - 将对象属性作为电子邮件主题传递

这里的菜鸟程序员。

我正在开发一个 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 触发器的编辑触发器,而这不会发生。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。