在运行函数之前可以检查多个空格吗?

时间:2017-07-10 17:44:39

标签: javascript google-apps-script google-sheets

我正在尝试设置一个脚本,该脚本仅在3个特定列具有字符串时运行,并且当第4个列为“是”时才运行。使用下面的语句,每次更改任何字段或将批准的列更改为“是”时,它都会运行脚本。如果正在编辑的当前行是第一行,也不应该运行它。

function onEditIntake() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = SpreadsheetApp.getActiveSheet();
  var r = SpreadsheetApp.getActiveRange();
  var row = r.getRow();
  var approved = s.getRange(row,10).getDisplayValue();
  var iproject = s.getRange(row,7).getDisplayValue();
  var assignee = s.getRange(row,8).getDisplayValue();
  var deadlineDate = s.getRange(row,9).getDisplayValue();

  if (iproject != null && assignee != null && deadlineDate != null && row != "1" && approved != "Yes") {

任何建议都将不胜感激!

要澄清:每次更改任何字段时,脚本的其余部分都会运行。我只希望它在满足所有IF条件时运行。

更新:我已将代码更改为,如下所示。它现在不会触发每个编辑的If语句。但是,只要为批准提供“是”语句,它就会启动脚本,无论其他字段是否为空,空,“”或任何其他类型的任何内容。

function onEditIntake() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = SpreadsheetApp.getActiveSheet();
  var r = SpreadsheetApp.getActiveRange();
  var row = r.getRow();
  var approved = s.getRange(row,10).getDisplayValue();
  var iproject = s.getRange(row,7).getDisplayValue();
  var assignee = s.getRange(row,8).getDisplayValue();
  var deadlineDate = s.getRange(row,9).getDisplayValue();
  Logger.log("Approved: " + approved);
  Logger.log("Project: " + iproject);
  Logger.log("Deadline: " + deadlineDate);
  Logger.log("Assignee: " + assignee);
  if ((iproject != " ") && (assignee != " ") && (deadlineDate != " ") && (row != "1") && (approved == "Yes")) {

1 个答案:

答案 0 :(得分:0)

这应该有效并且速度更快:

function onEditIntake() {
  var s = SpreadsheetApp.getActiveSheet()
  var range = s.getActiveRange();
  var row = range.getRow();
  var values = s.getRange(row, 7, 1, 4).getDisplayValues();

  var approved = values[0][3];
  var iproject = values[0][0];
  var assignee = values[0][1];
  var deadlineDate = values[0][2];

  if ((iproject != "") && (assignee != "") && (deadlineDate != "") && (row != 1) && (approved == "Yes")) {
    Logger.log('should run')
  }
}

注意有4个getDisplayValues()调用,而不是4个单独的getDisplayValue()调用。它不会在这个剧本中做出那么大的交易,但是将来需要考虑的事情。