找回密码
 立即注册

QQ登录

只需一步,快速开始

mmm223

金牌服务用户

3

主题

9

帖子

26

积分

金牌服务用户

积分
26
  • 120

    金币

  • 3

    主题

  • 9

    帖子

最新发帖
mmm223
金牌服务用户   /  发表于:2024-4-22 11:37  /   查看:397  /  回复:9
1金币
本帖最后由 Joestar.Xu 于 2024-4-22 11:59 编辑

就是我现在给每一列设置校验规则,但是因为第一行放的是标题,不需要校验,所以我写入如下其中一段代码
  1. case 'date':
  2.       var dv = GC.Spread.Sheets.DataValidation.createDateValidator(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.lessThan, new Date(3000, 1, 1));
  3.       dv.showInputMessage(true);
  4.       dv.inputMessage("请输入日期格式");
  5.       dv.inputTitle("提示");
  6.       activeSheet.getCell(-1, title.fieldSort - 1).validator(dv);
  7.       activeSheet.getCell(0, title.fieldSort - 1).validator(null);    //设置第一行没有校验
  8.       break;
复制代码

在本地看是可以的,为什么放到环境上,就失效了呢?

20240422-113604.jpg

最佳答案

查看完整内容

您好,最简单的方式,是通过事件来为这种情况做特殊处理,以下是一个简单的示例代码供您参考:

9 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-22 11:37:41
来自 8#
您好,最简单的方式,是通过事件来为这种情况做特殊处理,以下是一个简单的示例代码供您参考:

  1. sheet.bind(GC.Spread.Sheets.Events.RowChanged, function (e, info) {
  2.   console.log(info);
  3.   let oldRowIndex = info.row + info.count;
  4.   let validation = sheet.getDataValidator(oldRowIndex, 0);
  5.   sheet.setDataValidator(info.row, 0, validation);
  6. });
复制代码
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-22 12:06:55
2#
您好,我这边测试了一下您的代码,确实可以如期实现您的需求。

但是根据您目前提供的信息无法判断为什么上线了以后就失效了,有几个问题我想跟您确认一下:

1、线下和线上的版本是否一致?

2、线下和线上的代码是否一致?

3、线下和线上使用的文件是否一致?
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
mmm223
金牌服务用户   /  发表于:2024-4-23 16:09:25
3#
Joestar.Xu 发表于 2024-4-22 12:06
您好,我这边测试了一下您的代码,确实可以如期实现您的需求。

但是根据您目前提供的信息无法判断为什么 ...

你好,经过我的对比,我的第一行是固定的,用的是sheet.frozenRowCount(1),当我注释掉后就可以取让第一行取消校验了。请问有没有其他固定第一行的办法?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-23 17:34:24
4#
您好,我这边测试了一下,即使设置了冻结行,但是仍然没有复现出您的问题:

image.png475633544.png

目前固定第一行只有冻结窗格这一个方法,猜测导致这个问题的原因应该不是冻结窗格,最好还是麻烦您提供一下可以复现出这个问题的Demo,这边帮您调研一下看看。
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
mmm223
金牌服务用户   /  发表于:2024-4-24 10:42:44
5#
本帖最后由 mmm223 于 2024-4-24 10:46 编辑
Joestar.Xu 发表于 2024-4-23 17:34
您好,我这边测试了一下,即使设置了冻结行,但是仍然没有复现出您的问题:
demo.zip (389.57 KB, 下载次数: 18)
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-24 11:46:38
6#
您好,这是因为您之前设置validator的方式是获取第一列所有的单元格去设置的,并去掉第一行的validator,而不是一整列,此时validator的范围为第二行到第二百行,即:A2:A200。

此时在第二行插入一行时,因为SpreadJS为向上插入,所以不会包含在A2:A200这个范围中,validator也就无法生效了。

image.png494969481.png
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
mmm223
金牌服务用户   /  发表于:2024-4-24 12:25:11
7#
Joestar.Xu 发表于 2024-4-24 11:46
您好,这是因为您之前设置validator的方式是获取第一列所有的单元格去设置的,并去掉第一行的validator,而 ...

那我要怎么解决这个问题呢
回复 使用道具 举报
mmm223
金牌服务用户   /  发表于:2024-4-24 14:51:03
9#
Joestar.Xu 发表于 2024-4-22 11:37
您好,最简单的方式,是通过事件来为这种情况做特殊处理,以下是一个简单的示例代码供您参考:

你好 问题解决了,但是线上校验第一行的问题还没有,我打算暂时先搁置一下 感谢回答
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-24 14:54:05
10#
好的,那就先结贴了,线上校验第一行的问题如果您后续能稳定复现并提供Demo,请您另开一个新帖,届时我们帮您调研。
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部