Javascript 如何基于单单元格编辑(Google脚本/GAS)通过电子邮件发送电子表格中的整行数据

Javascript 如何基于单单元格编辑(Google脚本/GAS)通过电子邮件发送电子表格中的整行数据,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我们已经建立了一个工作流程电子表格,其中包含工作信息,如客户名称、工作详细信息等。我有一个漂亮的脚本,如果您从该行最后一列的下拉菜单中选择“完成”,它将隐藏整行 我现在要做的是发送一封包含我们隐藏的行中所有数据的电子邮件 更新:以下是我目前掌握的代码: /** * TITLE: * Hide a row if a value is inputted then send an email */ //**GLOBALS** // Sheet the data is on. var SH

我们已经建立了一个工作流程电子表格,其中包含工作信息,如客户名称、工作详细信息等。我有一个漂亮的脚本,如果您从该行最后一列的下拉菜单中选择“完成”,它将隐藏整行

我现在要做的是发送一封包含我们隐藏的行中所有数据的电子邮件

更新:以下是我目前掌握的代码:

/** 
* TITLE:
*     Hide a row if a value is inputted then send an email 
*/

//**GLOBALS**
// Sheet the data is on.
var SHEET = "Live Jobs";
// The value that will cause the row to hide. 
var VALUE = "Complete";
// The column we will be using 
var COLUMN_NUMBER = 22

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();

  //Ensure on correct sheet.
  if(SHEET == activeSheet.getName()){
    var cell = ss.getActiveCell()
    var cellValue = cell.getValue();

    //Ensure we are looking at the correct column.
    if(cell.getColumn() == COLUMN_NUMBER){
      //If the cell matched the value we require,hide the row. 
      if(cellValue == VALUE){
        activeSheet.hideRow(cell)
        SendEmail(e);
      };
    };
  };
}



/**
 * Sends emails with data from the current spreadsheet.
 */
function SendEmail(e) {
  // Fetch the email address
var correctSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Live Jobs');
var emailRange = correctSheet.getRange('Z1');  
var emailAddress = emailRange.getValue();

  var sheet = SpreadsheetApp.getActiveSheet();

var cell = sheet.getActiveCell()
var rowValue = cell.getRow();  

  var startRow = rowValue; // First row of data to process
  var numRows = 2; // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, 1, 5);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var message = row; // Second column
    var subject = 'Sending emails from a Spreadsheet';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

现在,隐藏行工作,电子邮件功能工作,如果我运行它从谷歌脚本编辑器,但由于某种原因,电子邮件没有发射时,我选择“完成”,但它是工作昨天

有什么建议吗

M

试试这个:

您可能无法使用简单的触发器来完成此操作,因为发送电子邮件需要授权

var SHEET = "Live Jobs";
var VALUE = "Complete";
var COLUMN_NUMBER = 22
function onEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()==SHEET){
    if(e.range.columnStart==COLUMN_NUMBER && e.value==VALUE){
        sh.hideRow(e.range.rowStart);
        SendEmail(e);
      }
    }
  }
}


function SendEmail(e) {
  MailApp.sendEmail(e.range.getSheet().getRange('Z1').getValue(), 'Invoice Job Alert', e.range.getSheet(e.range.rowStart,1,1,e.range.getSheet().getLastColumn()).getValues()[0].join(','));
}

嗨,Cooper,我收到一条关于MailApp行的错误消息:“TypeError:无法读取未定义的属性'range'(第16行,文件“Code”)”您是否从OneEdit函数传递了事件对象对不起,Cooper,我不确定您的意思。感觉很不对劲。。。我是否需要将事件对象传递给第22列中的每个单元格?请看我的答案。你在发送电子邮件(e)statement中都有e吗?希库珀,你的代码对我仍然不起作用!非常感谢你迄今为止的帮助。你对我上面修改的代码有什么建议吗?