【问题标题】:Google script - newConditionalFormatRule; whenNumberGreaterThanOrEqualTo not accepting cells?谷歌脚本 - newConditionalFormatRule; whenNumberGreaterThanOrEqualTo 不接受单元格?
【发布时间】:2020-11-13 13:33:41
【问题描述】:

我正在构建一个 google 脚本,但在创建条件格式时遇到了问题。如果我在工作表中构建它们,则设置条件格式的范围没有问题,然后将其设置为“大于或等于”并给它一个单元格,例如 =$B$5。

当我使用脚本构建相同的东西时,它给了我一个错误,它只接受数字而不接受单元格..?

谁能帮我解决这个问题?还是根本不支持?

// What i want to work, but throws an error, since it doesn't get a number.
formatrules.push(Rule1);
  var rule_builder = SpreadsheetApp.newConditionalFormatRule()
  .whenNumberGreaterThanOrEqualTo("=$B$9")
  .setBackground("#85e085")
  .setRanges([currentsheet.getRange("H3:H8")])
  .build();


// Something I tried, but it sets it to a static number and not the cell
formatrules.push(Rule1);
  var rule_builder = SpreadsheetApp.newConditionalFormatRule()
  .whenNumberGreaterThanOrEqualTo(sheet.getRange('B9').getValue())
  .setBackground("#85e085")
  .setRanges([currentsheet.getRange("H3:H8")])
  .build();

【问题讨论】:

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


    【解决方案1】:

    建议修改

    既然你想要一个动态值,那么使用.whenFormulaSatisfied(String formula) 函数呢?

    这是您的应用案例中的一个示例:

    var rule_builder = SpreadsheetApp.newConditionalFormatRule()
      .whenFormulaSatisfied("=H3:H8>$B$9")
      .setBackground("#85e085")
      .setRanges([currentsheet.getRange("H3:H8")])
      .build();
    

    参考

    whenFormulaSatisfied(formula)

    【讨论】:

    • 再次进入该范围似乎有点奇怪,但对于我的用例,它可以工作:-) 我几乎可以肯定会有更好的方法,但现在,这对我有用.谢谢!
    • @HenrikMogensen 你是什么意思有更好的方法?这种方式将自定义公式定义为ui 的条件格式。这是唯一的方法。
    • @Marios 我想我只是对设置自定义公式的需要感到困惑(你可以看看你是否进入条件格式),而不是在用户界面。这可能只是 API 中的一种奇怪设计,但如果您在 UI 中创建它,它们就会有所不同。
    • @HenrikMogensen 是的,我明白了,但就像提到的其他答案一样,.whenNumberGreaterThanOrEqualTo 接受一个数字,而不是一个公式。当您指定数字应大于或等于特定值时,它的工作方式与 ui 完全相同。
    【解决方案2】:

    whenNumberGreaterThanOrEqualTo 中的参数属于 Number 类型,如 API 文档 seen here 中所指定。您正在传递对单元格的字符串引用。相反,您必须使用SpreadsheetApp.getActiveSheet().getRange("B9").getValue(),就像您在第二次尝试中所做的那样。您遇到的问题可以通过在每次编辑电子表格时更新该规则来解决(即为创建此规则的函数创建一个 onEdit 触发器)。

    【讨论】:

    • 如果我在编辑上创建规则,我会得到大量堆叠在一起的规则。我相信这会导致其他问题。正如您所说,getValue() 返回值(一次),因此当您希望能够更改 B9 单元格时,它并不那么方便。我想知道的是,为什么如果我手动创建它可以创建引用单元格的规则,但如果我使用 API 则不能。这只是 API 中的一个缺陷,还是他们希望人们使用其他功能?
    【解决方案3】:

    当前接受的答案应该仍然被接受。这只是关于 OP 评论的补充帖子:

    再次进入范围似乎有点奇怪

    您可以定义一次范围,然后使用Template literals 将其合并到表达式中:

      var rng = "H3:H8";
      var rule_builder = SpreadsheetApp.newConditionalFormatRule()
      .whenFormulaSatisfied(`=${rng}>$B$9`)
      .setBackground("#85e085")
      .setRanges([currentsheet.getRange(rng)])
      .build();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 2018-10-27
      相关资源
      最近更新 更多