使用 setValue() 更改脚本中的值时,Google 表格中的数据验证(大于数字)不起作用

Data Validation (Number greather than) in a Google Sheet is not working when changing the value in a script using setValue()

提问人:Jos 提问时间:10/13/2023 最后编辑:Jos 更新时间:10/14/2023 访问量:53

问:

在 google web 应用程序中,我更新了 google 工作表中的数据,我希望输入的数据遵循工作表的数据验证规则。

我使用谷歌脚本在谷歌表格单元格中设置了值。 数据验证(编号 > 10)适用于工作表的单元格,并在高级选项中选择“拒绝输入”。 如果我将工作表本身中的值更改为 2,则更新将被拒绝,因此数据验证 (NUMBER_GREATER_THAN) 正在工作!

如果我对带有下拉列表的单元格(Datavalidation VALUE_IN_LIST)执行相同的操作,则 javascript 中的更新将被拒绝,并且将引发异常。

奇怪的是,异常是在 getValue() 中抛出的,而不是在 setValue() 中抛出的,但我可以忍受。显然,数据验证是异步的。 我认为一周前NUMBER_GREATER_THAN的数据验证正在工作,但我无法弄清楚发生了什么变化或我改变了什么。

我的问题是我希望为 setValue(2) 抛出异常,因为值 2 不是有效数字,但它不再发生。当我为下拉列表设置无效字符串时,异常确实会启动。 有什么想法吗?

try {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var ws = ss.getSheetByName('Sheet2');
    
   Logger.log("*** Number validation:");
   cellRange = ws.getRange(2, 7); 
   cellRange.setValue(12); // Valid number

   Logger.log('Cell-1 Before=[%s]);
   cellRange.setValue(2); // Invalid number
   Logger.log('Cell-1 updated!');
   Logger.log('Cell-1 After=[%s]', cellRange.getValue());  // No exception! 
    
   Logger.log("*** Dropdown validation:");
   cellRange = ws.getRange(2, 4);
   cellRange.setValue('Option-2'); // Valid string
   
   Logger.log('Cell-2 Before=[%s]);
   cellRange.setValue('Option-4)'); // Invalid string
   Logger.log('Cell-2 updated!'); // Not yet an exception 
   Logger.log('Cell-2 After=[%s]', cellRange.getValue()); // Exception for dropdown
  
} catch (err) {
   Logger.log('Set Value Failed: ' +err);
}


控制台中的输出:

*** Number validation:
Cell-1 Before=[12.0]
Cell-1 updated!
Cell-1 After=[2.0]

*** Dropdown validation:
Cell-2 Before=[Option-2]
Cell-2 updated!
Set Value Failed: Exception: The data you entered in cell D4 violates the data validation rules set on this cell.
Use one of the following values: Option-1, Option-2, Option-3.
验证 google-sheets-api 条件 工作表

评论

0赞 Tanaike 10/14/2023
我必须为我糟糕的英语水平道歉。不幸的是,我无法理解您当前的问题和预期的结果。我能问你他们的细节吗?首先,我想正确理解您的问题。
0赞 Jos 10/14/2023
我敢肯定这不是你的英语,而是我的解释。我试图改进解释。这是一个很难解释的话题,但我希望这会有所帮助。
0赞 Tanaike 10/14/2023
感谢您的回复。从您更新的问题中,关于,我担心在当前阶段,可能没有方法可以直接从这种情况中检索错误消息。因此,作为一种解决方法,如果您已经知道数据验证的规则,那么使用该规则检查每个值怎么样?很抱歉,我无法提出明确的解决方案。我想学习更多。My problem is I want the exception to be thrown for the setValue(2) since value 2 is not a valid number but it is no longer happening.
0赞 Jos 10/14/2023
当然这是可能的,但我正在开发一个更通用的解决方案,该解决方案使用电子表格中的字段更新行,我只想知道验证是否成功。然后,该解决方案将适用于行中任何单元格中的行中的任何验证。与此同时,我发现如果我设置了一个 none 数值,那么异常确实会生效。除此之外,我认为最近它确实可以正常工作,但我不知道在此期间发生了什么变化。
0赞 Tanaike 10/15/2023
感谢您的回复。我深表歉意,我的评论对您的情况没有用。

答: 暂无答案