找回密码
 立即注册

QQ登录

只需一步,快速开始

Echo尘

注册会员

4

主题

18

帖子

68

积分

注册会员

积分
68
最新发帖
Echo尘
注册会员   /  发表于:2021-7-15 11:21  /   查看:3729  /  回复:10
gcexcel 数据验证时,发现单元格值为空时,直接返回了true。实际上在excel里,这个应该为false,这个问题,前端正常,后端逻辑不对。急急急!!

10 个回复

倒序浏览
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-15 14:11:36
推荐
Echo尘 发表于 2021-7-15 13:43
D13,F5单元格都可以复现。就是调IValidation 的getValue() 方法,没有别的调用。可以看到,为空值时, ...

您好,IValidation里面的getValue方法获取是否满足所有验证条件,而该单元格中没有验证条件,因此,在GcExcel中,空值也是一个符合条件,返回的是true。
image.png802138976.png

如果您希望空值不返回true,您可以加个判断,判断该单元格的值是否为null.
worksheet.getRange("D13").getValue()
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-15 11:31:42
沙发
请问您通过什么接口返回的true呢?建议您提供一个简单的demo这边调研一下。
回复 使用道具 举报
Echo尘
注册会员   /  发表于:2021-7-15 11:51:26
板凳
Derrick.Jiao 发表于 2021-7-15 11:31
请问您通过什么接口返回的true呢?建议您提供一个简单的demo这边调研一下。

        IRange usedRange = worksheet.getUsedRange();
        IRange iRange;
        IValidation validation;
        for (int i = usedRange.getRow(); i < usedRange.getLastRow() + 1; i++) {
            for (int j = usedRange.getColumn(); j < usedRange.getLastColumn() + 1; j++) {
                iRange = usedRange.get(i, j);
                validation = iRange.getValidation();
                if (!iRange.getHasValidation() || !validation.getShowError()) {
                    continue;
                }
                if (iRange.getValue() == null && !validation.getIgnoreBlank()) {
                    throw new GenericException(ErrorCode.CHECK_VALIDATION_NULL_ERROR, iRange.getAddress());
                } else if (!validation.getValue()) {
                    throw new GenericException(ErrorCode.CHECK_VALIDATION_ERROR,
                                               iRange.getAddress(),
                                               validation.getErrorMessage());
                }
            }
        }
回复 使用道具 举报
Echo尘
注册会员   /  发表于:2021-7-15 12:00:37
地板
Derrick.Jiao 发表于 2021-7-15 11:31
请问您通过什么接口返回的true呢?建议您提供一个简单的demo这边调研一下。

        IRange usedRange = worksheet.getUsedRange();
        IRange iRange;
        IValidation validation;
        for (int i = usedRange.getRow(); i < usedRange.getLastRow() + 1; i++) {
            for (int j = usedRange.getColumn(); j < usedRange.getLastColumn() + 1; j++) {
                iRange = usedRange.get(i, j);
                validation = iRange.getValidation();
                if (!iRange.getHasValidation() || !validation.getShowError()) {
                    continue;
                }
                if (!validation.getValue()) {
                    throw new GenericException(ErrorCode.CHECK_VALIDATION_ERROR,
                                               iRange.getAddress(),
                                               validation.getErrorMessage());
                }
            }
        }
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-15 12:21:54
5#
Echo尘 发表于 2021-7-15 12:00
IRange usedRange = worksheet.getUsedRange();
        IRange iRange;
        IValidation  ...

建议您提供一个完整的工程以及excel文件,目前由您提供的代码片段暂时无法复现您的问题 image.png240641478.png
回复 使用道具 举报
Echo尘
注册会员   /  发表于:2021-7-15 13:43:52
6#
Echo尘 发表于 2021-7-15 12:00
IRange usedRange = worksheet.getUsedRange();
        IRange iRange;
        IValidation  ...

D13,F5单元格都可以复现。就是调IValidation 的getValue() 方法,没有别的调用。 image.png99398497.png 可以看到,为空值时,直接返回了true,而没有判断 validation.getIgnoreBlank()(是否忽略空值)。使得配置的忽略空值无效。微信号1038396263,有需要可以加微信详细聊

tdcbjsq.xlsx.zip

13.83 KB, 下载次数: 71

回复 使用道具 举报
Echo尘
注册会员   /  发表于:2021-7-15 14:27:33
8#
Derrick.Jiao 发表于 2021-7-15 14:11
您好,IValidation里面的getValue方法获取是否满足所有验证条件,而该单元格中没有验证条件,因此,在GcE ...

可以微信或者umeeting交流吗?我感觉这样交流有点慢。
回复 使用道具 举报
Echo尘
注册会员   /  发表于:2021-7-15 14:32:45
9#
如图,speadjs上,这个单元格明显为无效数据,被红圈圈出来了。
image.png323363036.png
excel文件里,这个也被设置为不忽略空值,即,即使为空值,也要进行校验。

但是咱们gcexel里,直接对空值放过了,没有考虑“忽略空值”这个设置。这个设置获取的方法也很简单,getIgnoreBlank()。就是没处理而已。
回复 使用道具 举报
Echo尘
注册会员   /  发表于:2021-7-15 14:34:18
10#
Echo尘 发表于 2021-7-15 14:32
如图,speadjs上,这个单元格明显为无效数据,被红圈圈出来了。

excel文件里,这个也被设置为不忽略空值 ...

image.png373062438.png
image.png400888060.png
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部