Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用google sheets中的单元格值发送电子邮件通知_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 使用google sheets中的单元格值发送电子邮件通知

Google apps script 使用google sheets中的单元格值发送电子邮件通知,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在创建一个谷歌工作表,输入新员工的名字、姓氏、头衔和部门,然后在添加新员工时向不同的人发送一封包含这些信息的电子邮件 我创建此代码是为了在编辑行(dept)中的最后一个单元格时触发电子邮件,我希望生成一封电子邮件,其中包括主题中前两个单元格(名字、姓氏)的值以及正文中所有4个单元格(第一、最后、标题、dept)的值 但有些地方不太正确,我得到了一个“未定义”的Rowdata错误。有什么建议吗 function sendNotificationNEWpersons() { var ss =

我正在创建一个谷歌工作表,输入新员工的名字、姓氏、头衔和部门,然后在添加新员工时向不同的人发送一封包含这些信息的电子邮件

我创建此代码是为了在编辑行(dept)中的最后一个单元格时触发电子邮件,我希望生成一封电子邮件,其中包括主题中前两个单元格(名字、姓氏)的值以及正文中所有4个单元格(第一、最后、标题、dept)的值

但有些地方不太正确,我得到了一个“未定义”的Rowdata错误。有什么建议吗

function sendNotificationNEWpersons() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
//Get Active cell
  var mycell = ss.getActiveSelection();
  var cellcol = mycell.getColumn();
  var cellrow = mycell.getRow();
  var rowData = sheet.getRange(cellrow, sheet.getLastColumn()).getValues();
//Defined Notification Details
  var recipients = "xxxx@gmail.com";
  var subject = "NEW EMPLOYEE: " + rowData[0][4] + rowData[0][5] + "(Row " + mycell.getRow() + ")";
  var body = rowData[4] + rowData[5] + "has just been added to the NewPersons sheet on Row " + mycell.getRow() + " To view them, visit: " + ss.getUrl();
//If column 5 isn't empty in NewPersons sheet
  if (cellcol == 5 && sheet.getName() == "NewPersons" && mycell.getValue() !=-1)
  {
//Send the Email
  MailApp.sendEmail(recipients, subject, body);
  }
//End sendNotification
  }

因此,上面的代码中有一些错误导致了未定义的错误。首先,您只使用单个单元格的内容填充rowData,而不是您可能希望的整行内容。其次,在设置主体和主体变量的值时,您错误地处理了rowData变量

假设您的行数据被放置在电子表格的A-D列中,并且rowData变量只应包含一行4列(对应于该顺序中的名字、姓氏、标题和部门),下面是代码的固定版本:

function sendNotificationNEWpersons() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  var mycell = ss.getActiveSelection();
  var cellcol = mycell.getColumn();
  var cellrow = mycell.getRow();

  // Get the full row of data, not just one cell
  var rowData = sheet.getSheetValues(cellrow, 1, 1, sheet.getLastColumn());
  // rowData is now a 2D array of Object (cell values), with a single row
  // and sheet.getLastColumn() columns

  // Here, only including the first and last names in the email
  var recipients = "xxxx@gmail.com";
  var subject = "NEW EMPLOYEE: " + rowData[0][0] + " " + rowData[0][1] +
      "(Row " + mycell.getRow() + ")";
  var body = rowData[0][0] + " " + rowData[0][1] + 
      "has just been added to the NewPersons sheet on Row " + 
      mycell.getRow() + " To view them, visit: " + ss.getUrl();

  //If column 5 isn't empty in NewPersons sheet
  if (cellcol == 5 && sheet.getName() == "NewPersons" &&
      mycell.getValue() !=-1) {
    //Send the Email
    MailApp.sendEmail(recipients, subject, body);
  }
}
代码将避免您看到的错误。然而,这个解决方案可能不是最好的设计。您不需要指定如何调用此函数(可以使用菜单控件、OneEdit触发器或其他函数)——这取决于当前选定的单元格位于最新用户行且位于第5列的假设可能不正确

下面是一些你可能需要考虑的其他设计:

  • 使用谷歌表单。您可以使用(名字、姓氏、标题、部门)文本字段创建表单。然后,您可以给该表单一个onFormSubmit(e)触发器,以便在提交新条目(包含表单中输入的所有数据)时向收件人发送电子邮件。从那时起,新员工可以直接输入表单,数据将被放入表单响应电子表格中;触发器将处理电子邮件
  • 创建一个侧栏。您可以为电子表格设计一个边栏,用户可以在其中输入雇用数据,并包括一个“添加员工”按钮,用于将数据写入电子表格、发送电子邮件以及执行任何其他需要执行的操作。这种方法实际上与使用谷歌表单相同,但更具可定制性,在技术上更具挑战性。您可以检查示例代码,了解如何构造工作侧栏
  • 正确使用触发器。如果设置了电子表格OneEdit(e)触发器,则可以查询事件以确定编辑了哪个单元格。您可以使用该信息来确定您所在的行和列,而无需求助于ss.getActiveSelection()。请注意,这种方法并不理想,因为OneEdit(e)将在电子表格中的任何单元格被编辑时触发,因此需要在执行其余触发器之前仔细验证编辑的单元格位置是否合适
  • 请检查这行“var rowData=sheet.getRange(cellrow,sheet.getLastColumn()).getValues();”是否有误。使用Logger.log(rowData)并查看您在那里得到了什么。。。我认为代码应该是“var rowData=sheet.getRange(Row,Column,NumberOfRows,NumberOfCoulmns).getValues();”