gpt4 book ai didi

validation - 如何判断单元格值是否已通过验证

转载 作者:行者123 更新时间:2023-12-04 01:54:44 26 4
gpt4 key购买 nike

我熟悉 Google Apps 脚本 DataValidation目的。获取和设置验证标准。但是如何以编程方式判断单元格值是否实际有效。所以我可以在电子表格中看到红色的验证失败消息,但是可以通过代码获取单元格当前验证失败的事实吗?

我试图看看是否有一个单元格属性告诉你这一点,但没有。我还寻找了某种 DataValidation“验证”方法 - 即根据验证规则测试一个值,但也没有

有任何想法吗?这可能吗??

最佳答案

我创建了一个 解决方法 对于这个问题,它的工作方式非常丑陋 - 从技术上说 - 并且略微不确定。

关于解决方法:
它的工作原理是基于 catch() 的 Web 浏览器实现的经验。函数允许访问从 Google 的 JS 代码部分抛出的错误。
如果单元格中的无效输入被验证规则拒绝,则系统将显示一条错误消息,用户编写的 GAS 可捕获该消息。为了使其首先工作,必须在指定的单元格上设置拒绝值,然后必须重新输入(修改)其值,然后 - 在此之后 - 调用 getDataValidation()内置函数允许用户捕捉必要的错误。
使用此方法只能测试单个电池,如 setCellValues()忽略任何数据验证限制(截至今天)。

缺点:

  • 不一定要重新检查此功能的有效性:
    它在值插入单元格后立即调用单元格验证函数。
    因此该函数的结果可能是错误的。
  • 由于单元格将被更改,代码会弄乱历史记录 - 如果它们被更改
    有效的。

  • 我已经在 Firefox 和 Chromium 上成功测试了它。
    function getCellValidity(cell) {
    var origValidRule = cell.getDataValidation();
    if (origValidRule == null || ! (cell.getNumRows() == cell.getNumColumns() == 1)) {
    return null;
    }
    var cell_value = cell.getValue();
    if (cell_value === '') return true; // empty cell is always valid
    var is_valid = true;
    var cell_formula = cell.getFormula();
    // Storing and checking if cell validation is set to allow invalid input with a warning or reject it
    var reject_invalid = ! origValidRule.getAllowInvalid();
    // If invalid value is allowed (just warning), then changing validation to reject it
    // IMPORTANT: this will not throw an error!
    if (! reject_invalid) {
    var rejectValidRule = origValidRule.copy().setAllowInvalid(false).build();
    cell.setDataValidation(rejectValidRule);
    }
    // Re-entering value or formula into the cell itself
    var cell_formula = cell.getFormula();
    if (cell_formula !== '') {
    cell.setFormula(cell_formula);
    } else {
    cell.setValue(cell_value);
    }
    try {
    var tempValidRule = cell.getDataValidation();
    } catch(e) {
    // Exception: The data that you entered in cell XY violates the data validation rules set on this cell.
    // where XY is the A1 style address of the cell
    is_valid = false;
    }
    // Restoring original rule
    if (rejectValidRule != null) {
    cell.setDataValidation(origValidRule.copy().setAllowInvalid(true).build());
    }
    return is_valid;
    }

    我仍然建议在上面由 Jonathon 打开的 Google 错误报告中加星。

    关于validation - 如何判断单元格值是否已通过验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27713365/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com