Google apps script 谷歌电子表格以三个单元格为条件

Google apps script 谷歌电子表格以三个单元格为条件,google-apps-script,google-sheets,conditional-statements,Google Apps Script,Google Sheets,Conditional Statements,我一直在尝试在我的电子表格上实现一个条件,基本上是一个包含三个条件单元格的检查表,其中有“是”或“否”。我想要实现的(使用onEdit)是一个所有三个单元格都包含“是”的值,输入下一列,其中包含输入最终“是”的日期。我已经成功地创建了其他脚本,这些脚本工作得很好,但这一个让我感到困惑 谢谢因为单元格可以单独编辑,所以OneEdit将始终需要检查所有条件单元格的值,并且仅当所有值都为“是”时才写入时间戳 函数onEdit(事件){ var conditionalCells=[“B1”、“B2”、“

我一直在尝试在我的电子表格上实现一个条件,基本上是一个包含三个条件单元格的检查表,其中有“是”或“否”。我想要实现的(使用onEdit)是一个所有三个单元格都包含“是”的值,输入下一列,其中包含输入最终“是”的日期。我已经成功地创建了其他脚本,这些脚本工作得很好,但这一个让我感到困惑


谢谢

因为单元格可以单独编辑,所以OneEdit将始终需要检查所有条件单元格的值,并且仅当所有值都为“是”时才写入时间戳

函数onEdit(事件){
var conditionalCells=[“B1”、“B2”、“B3”];//监视条件的数组
var inList=false;//假设edit在条件之外
var allYes=true;//并且所有值都是“Yes”。
var sheet=event.source;//已编辑的工作表
var cell=event.range.getA1Notation();//获取范围描述
//循环检查所有条件语句的内容。
//验证触发OneEdit()的编辑是否在一个文件中
//对于我们的条件单元格,如果为,则将inList设置为true。
对于(var i=0;i
到目前为止您有什么?你还没有提供关于这个问题的任何信息。很抱歉没有提供任何脚本,我尝试过的一切都失败了,与你上面给出的相去甚远,非常感谢。就在这一点上,它似乎导致了这一行的错误?变量表=event.source;//已编辑的工作表错误消息:TypeError:无法从未定义中读取属性“source”。(第5行,文件“代码”)-抱歉,我似乎无法将其正确格式化为代码!当函数由编辑触发时,将提供“event”参数;如果在调试器中运行,则没有“事件”。看。啊,是的,谢谢,我也发现了一些东西。您在数组中分配B1、B2和B3,我发现了一个小问题,我需要检查的列是D、E和F,然后将日期放在G列中,但是,指定了行号-我如何使它在所有行上工作?非常感谢。你从来没有回过头来,在你的问题中添加足够的信息来明确你在寻找什么——你上面的评论是可以解释的,所以从这里开始。你说“三个细胞”,那是三个细胞。如果你的意思是“同一行的三列中的单元格”,或者更好的说法是“同一行的D、E、F列中的单元格”,那么答案就不同了。你需要修改代码;
event.range
包含行信息,使用该信息选择正确行的D:F,并设置
setValue
的范围。
getRange
方法有一个版本,它采用数字来指定行和列。我为延迟响应表示歉意,更紧迫的问题转移了我的注意力。我有一个表,其中包含三个是/否下拉框,分别为D列、E列和F列。由于我定期添加数据,因此有多行用于此。上面您给我的代码对于第2行(第1行是标题)非常有效。我只是想实现它,这样当我在所有三列(D、E和F)上单击Yes时,G列会自动填充时间和日期。这是否更好地阐明了我的要求,对不起,有时我忘记了包括更重要的细节!
function onEdit(event) {
  var conditionalCells = [ "B1", "B2", "B3" ];  // Array of monitored conditionals
  var inList = false;                           // assume edit was outside of the conditionals
  var allYes = true;                            // and that all values are "Yes".
  var sheet = event.source;  // Sheet that was edited
  var cell = event.range.getA1Notation();  // get range description
  // Loop through all conditionals checking their contents.
  // Verify that the edit that triggered onEdit() was in one
  // of our conditional cells, setting inList true if it was.
  for (var i = 0; i < conditionalCells.length && allYes; i++) {
    if (cell == conditionalCells[i]) inList = true;
    allYes = (sheet.getRange(conditionalCells[i]).getValue() == "Yes");
  };
  // If this was our final Yes, record the date.
  // By validating inList, we ensure we record only the first time
  // all conditionals are "Yes".
  if (inList && allYes) sheet.getRange("C1").setValue(new Date());
}