找回密码
 立即注册

QQ登录

只需一步,快速开始

kelvinChen
金牌服务用户   /  发表于:2024-3-20 15:31  /   查看:660  /  回复:10
本帖最后由 Richard.Huang 于 2024-3-22 12:04 编辑

产品:SpreadJS
版本:V17.0.3

  1. var dv = GC.Spread.Sheets.DataValidation.createTextLengthValidator(
  2.   GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.greaterThan,
  3.   "0",
  4.   "20"
  5. );

  6. dv.ignoreBlank(false);
  7. spread.options.highlightInvalidData = true;
  8. sheet.setDataValidator(
  9.   activeCell.row,
  10.   activeCell.col,
  11.   dv,
  12.   GC.Spread.Sheets.SheetArea.viewport
  13. );
复制代码
给当前单元格设置了不能为空,但是执行上面代码,空单元格没有出现红圈提醒

10 个回复

倒序浏览
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-3-20 16:11:14
沙发
您好,我将您的代码在SpreadJS中进行了测试,但是并没有复现您所描述的内容,只要正确执行了您主贴中的这些代码,应该是能够正确圈释出空单元格的。您可以在您的这段代码中打上断点,看是否执行了这些代码
image.png634309081.png
回复 使用道具 举报
kelvinChen
金牌服务用户   /  发表于:2024-3-20 17:27:45
板凳
现在红圈出来了,但是设置空单元格和它一行的单元格都圈出来了
let dv = GC.Spread.Sheets.DataValidation.createTextLengthValidator(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.greaterThan, "0", "20");
          dv.ignoreBlank(false);
          spread.options.highlightInvalidData = true;
          sheet.setDataValidator(row, col, dv, GC.Spread.Sheets.SheetArea.viewport);
          console.log(row,col);
          let result = sheet.isValid(row, col, sheet.getValue(row, col))
          !result ? _this.isPass = false : ""
           spread.resumePaint();
我只设置了 0 3这个单元格,但是它所在行后面也出现了红圈
image.png947249145.png
image.png122722472.png
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-3-20 17:51:18
地板
kelvinChen 发表于 2024-3-20 17:27
现在红圈出来了,但是设置空单元格和它一行的单元格都圈出来了
let dv = GC.Spread.Sheets.DataValidation ...

您好,这说明您E1:O1这个区域也被设置了相关的数据验证,您可以通过sheet.getDataValidator(0,4)来查看,如果没有数据验证,显示结果如下:
image.png358046874.png
回复 使用道具 举报
kelvinChen
金牌服务用户   /  发表于:2024-3-21 15:29:40
5#
我在循环里面调用的,但是我debugger看了,我只传入了一个单元格,但是该单元格的后面单元格都被设置了为空,后面的单元格行和列在循环中没有出现过,按道理来说后面的单元格不应该被圈
回复 使用道具 举报
kelvinChen
金牌服务用户   /  发表于:2024-3-21 15:32:40
6#
image.png649928893.png
if(!sheet.getValue(row, col) && sheet.getTag(row, col) && sheet.getTag(row, col).isRequire){
        console.log(row,col,'传入的单元格');
          let dv = GC.Spread.Sheets.DataValidation.createTextLengthValidator(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.greaterThan, "0", "10");
          dv.ignoreBlank(false);
          sheet.setDataValidator(row , col, dv, GC.Spread.Sheets.SheetArea.viewport);
          debugger
          let result = sheet.isValid(row, col, sheet.getValue(row, col))
          _this.isPass = false
         
      }
回复 使用道具 举报
kelvinChen
金牌服务用户   /  发表于:2024-3-21 15:40:53
7#
还有,我尝试,在表单的第一列和第二列设置的,不会出现这种情况,第二列后面设置的会出现
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-3-21 16:43:26
8#
kelvinChen 发表于 2024-3-21 15:32
if(!sheet.getValue(row, col) && sheet.getTag(row, col) && sheet.getTag(row, col).isRequire){
     ...

您好,能否在您这段“for循环添加数据验证的代码块”前后添加代码spread.toJSON(),并将这两份json提供给我们,方便我们针对性的去进行测试和复现
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-3-22 12:05:50
9#
您好,请问楼主的问题是否得到解决,如果仍然存在问题,能否如我上述所说将代码块前后的json提供给我们进行测试
回复 使用道具 举报
kelvinChen
金牌服务用户   /  发表于:2024-3-22 17:39:46
10#
我自己找到了原因,我使用了字符串的row和col遍历会出现这种情况,我把row和col转换未数字后,这种情况消失了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部