我正在尝试设置一个脚本,该脚本仅在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")) {
答案 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()调用。它不会在这个剧本中做出那么大的交易,但是将来需要考虑的事情。