If statement 如果函数为true时未运行,则使用Google Sheets

If statement 如果函数为true时未运行,则使用Google Sheets,if-statement,google-apps-script,google-sheets,If Statement,Google Apps Script,Google Sheets,我想在GoogleSheets中的报告中添加一个按钮。这个按钮可以工作,但你不能在手机上使用,所以我被告知你必须使用onEdit。我遇到的问题是,只有在编辑某个框时才进行更改,但当它是正确的框时,谷歌似乎会冻结,而不会运行脚本 我已经试过使用if作为(row=8)、(row==8)和(row==8”) 因此,使用该代码,如果我编辑除8以外的任何行,我的日志如下所示: 第1行已编辑 第x行和第x列 做了那件事 但如果是第8行,我的日志会显示: 第1行 编辑!!第x行和第x列 除此之外,if语句中的

我想在GoogleSheets中的报告中添加一个按钮。这个按钮可以工作,但你不能在手机上使用,所以我被告知你必须使用
onEdit
。我遇到的问题是,只有在编辑某个框时才进行更改,但当它是正确的框时,谷歌似乎会冻结,而不会运行脚本

我已经试过使用if作为
(row=8)
(row==8)
(row==8”)

因此,使用该代码,如果我编辑除8以外的任何行,我的日志如下所示:

第1行已编辑

第x行和第x列

做了那件事

但如果是第8行,我的日志会显示:

第1行

编辑!!第x行和第x列


除此之外,if语句中的冻结时间是什么时候?

请告诉我您真正想用它做什么,我会为您设置。现在希望这能帮助你理解逻辑

我不使用Logger.log()调试此类代码。相反,我使用
e.source.toast()
函数

function onEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!='Sheet189')return;//this is important so that you don't get edits from unwanted pages
  //e.source.toast('Flag1');
  if(e.range.rowStart==8 && e.range.columnStart==6) {             
    var msg=Utilities.formatString('You are editing %s.',sh.getRange(e.range.rowStart,e.range.columnStart).getA1Notation());
    SpreadsheetApp.getUi().alert(msg);
  } 
  if(e.range.rowStart!=8 || e.range.columnStart!=6) {
    var msg=Utilities.formatString('You are not editing F8. Instead you are editing %s.',sh.getRange(e.range.rowStart,e.range.columnStart).getA1Notation());
    SpreadsheetApp.getUi().alert(msg);
  }
}
在运行此操作之前,您可能需要更改图纸编号。我没有设置Logger.log,因为我不喜欢将其用于此类代码。我做了测试,效果很好


首先,我想指出代码中的一些错误

  • 您不需要将行变量设置为字符串<代码>变量行=range.getRow()很好

  • 您总是记录“第1行”,为什么不更新它以实际说出哪一行已更新<代码>Logger.log(“行”+行)

  • 您的代码将输出“完成的事情”,而不管它做了什么。也许只是说它在合适的盒子里做了什么

您的固定代码如下所示:

function onEdit(evt) {
      var range = evt.range;
      var row =  range.getRow();
      var col =  range.getColumn();

      Logger.log("line " + row + "edited!! Row: " + row + " and column: " + col);

      if (row == 8 && col == 6 ) {
        Logger.log("Right cell. Did the thing.");
        //Call here whatever you want to trigger when this cell changes.
      } //Don't need a "else" if you are not going process anything
    }

希望这有帮助

首先,我想谈谈你的观点:1。我知道它不需要是字符串,只是想看看它是否有用。日志记录不是我想要做的,只是一种查看它对代码有多大影响的方法。(3与2相同)。因此,我将您的代码添加到我的函数中,得到了相同的结果。仅记录“第x行已编辑!第x行和冒号:x”在第8行和第6行时,它仍然没有打印“正确的单元格,完成了操作”。@Joost,您确定编辑了正确的单元格吗?第6列和第8行表示单元格F8。对于范围,索引从1开始。是的,id删除了测试的列要求,第8行中的任何内容都应该触发它。当任何其他单元格被更改时,会出现“完成”的最后一行,当编辑第8行时,只会出现if之前的内容。对我来说,在谷歌的稿件上似乎是一个更大的问题。@Joost“当任何其他单元格发生变化时”是什么意思?当您编辑第8行的单元格时,您能告诉我日志上显示了什么吗?我无法重现您面临的问题。[19-10-31 05:28:30:137 PDT]第1行[19-10-31 05:28:30:138 PDT]已编辑!!第8行和第7行当我编辑第8行时会出现这个问题。它还应该包括位于if中的行,以及表示事情已完成的行。你不能重现我的结果真的很奇怪。尝试了你的代码,但看不到消息要显示在哪里。我使用logger.log只是为了调试,一旦它按我认为应该的方式工作,就用一大块cde来替换它。它显示在电子表格顶部的警报对话框中。我假设您意识到您不能从代码编辑器运行这个。只需通过更改页面名称进行设置,然后转到该页面并编辑一些适当的单元格,一个警报窗口将让您知道它是否为F8。
function onEdit(evt) {
      var range = evt.range;
      var row =  range.getRow();
      var col =  range.getColumn();

      Logger.log("line " + row + "edited!! Row: " + row + " and column: " + col);

      if (row == 8 && col == 6 ) {
        Logger.log("Right cell. Did the thing.");
        //Call here whatever you want to trigger when this cell changes.
      } //Don't need a "else" if you are not going process anything
    }