首页 > 解决方案 > 抑制数据验证错误

问题描述

我有一个电子表格,一旦在下拉框中选择了一个值,我就会从数据范围中删除它。我删除它是因为一旦选择我不希望它出现在其他下拉列表中。

但是,通过从范围中删除它会使现有下拉列表无效,因为数据范围不再包含所选值。我在右上角看到一个丑陋的红色三角形。

我已经搜索过,我发现没有办法抑制这个红色三角形,所以我现有的选择数据的方法被卡住了。也许还有其他方法可以实现从动态范围中选择数据并随后删除所选值的目标?

标签: google-sheets

解决方案


为此,您需要 Apps 脚本

主要是因为公式总是会自我更新。使用脚本,您可以运行一次并让值保持原样,直到您修改它们。

它可以通过多种方式实现,具体取决于您希望此列表的行为方式。需要考虑的一些事项是:

  • 要选择的项目列表是否始终相同,还是动态的?
  • 输入后是否需要重置项目列表?它将如何准确重置?

在开发过程中可能会出现更多问题,但这些是我首先要澄清的事情。

DataValidationBuilder

这是您在 Apps 脚本中用来构建动态下拉菜单的内容。基于有限的信息,我的方法可能是:

  • 创建onEdit触发器(每次对工作表进行编辑时运行的脚本)
  • 它会检测是否从数据验证单元格中选择了一个值。
  • 它将检查以确保其值正确。
  • 然后从该单元格中删除下拉数据验证并锁定该值
  • 修改其余单元格的“主”值列表。
  • 最后,它必须为其余单元重建数据验证。

下面是一个简单的片段来演示如何在代码中创建下拉菜单:

function createSimpleDropdown() {
  // Select a cell to insert the data validation into
  let cell = SpreadsheetApp.getActive().getRange('A1');
  // Define a list of the items to choose from (this can be built from a range too)
  let list = ["cat", "dog", "mouse", "elephant"]
  let rule = SpreadsheetApp.newDataValidation() // This sets up a new data validation object
    .requireValueInList(list, true) // this configures it to use the list and show a dropdown
    .build(); // this builds it
  // Finally, assign the rule to the cell
  cell.setDataValidation(rule);

这演示了一个单元格,但也可以做一个范围,虽然在代码级别稍微复杂一些,但如果您需要做更多的事情,它会大大加快执行速度。

您还可以根据您的特定工作流程将其设置在时间驱动的触发器上。

参考

不过,我很感激您可能不熟悉 Apps 脚本,因此如果您想走这条路,这里有一些链接可以帮助您入门:


推荐阅读