请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

王公子-_-
初级会员   /  发表于:2025-12-2 20:11  /   查看:57  /  回复:9
1金币
为单元格设置下拉框并设置列表校验规则不会出现此问题,但为表格列做相同设置,会出现两个下拉组件

去掉列表验证规则重复下拉按钮会消失,
于是写了demo验证此问题,发现demo中设置列表验证规则单元格和表格列都会出现下拉按钮重复的问题和生产环境表现不一致
  1. import * as GC from "@grapecity/spread-sheets";
  2. GC.Spread.Sheets.LicenseKey = "E669384686241538#B1Y1ZRBx6NrZmaxRlcrQFVRVDaX9WOUhzTyhHV5FFc7MmST3yMPBVWxJFWwADNnV7SlhWTnh7dzYXN8U7KnJGZB36aHJzRV36SUhzUJJ7KuxEe7hHUxpEWYh7Tqx6RaBzR9d4dxdDZIFjRLVnNJFzLrIWQ8RGUyIFNlZjMNZUYspHSSdEUYVmQDZkdFJmUTFGUY3kRz5WVopXQiJGM55kcwcWbFlVWqd6Rr8UOClkdkZmarYVU6VjRHJkdRBFWlBTMyQFb5R7Mxk4TUx6QLN7U7QnNa3SY7Nldr9ESBZXe094USZ6VOdke9ZXNQt4KzQUZDdEcORkVrUVM4NkRI36TVVzZXlmdWRGSvYjY0dUQLFXcvpkcPF6Y8E7ai9Udsh7KWRWayNXd8gmZGdVYVREMBlmTY5ERE94YxhEUlxWTOFVMlRFWmFzdmhDRxQWWrUFOxVDV8VmI0IyUiwiI6EDOzgjQDZjI0ICSiwCMyAzMzYDM9cTM0IicfJye35XX3JSVBtUUiojIDJCLicTMuYHITpEIkFWZyB7UiojIOJyebpjIkJHUiwiI7UDOzIDMgAzM4ADNyAjMiojI4J7QiwiIzVnLzVXajNXZt9iKsAnauMXdpN6cl5mLqwybp9yc5l6YzVWbuoCLt36YuMXdpN6cl5mLqwicr9ybj9yc5l6YzVWbuoCLwpmLvNmLzVXajNXZt9iKs46bj9idlRWe4l6YlBXYydmLqwibj9SbvNmL9RXajVGchJ7ZuoCLt36YukHdpNWZwFmcn9iKsI7au26YukHdpNWZwFmcn9iKsAnau26YukHdpNWZwFmcn9iKiojIz5GRiwiITVVSDNVRNJiOiEmTDJCLlVnc4pjIsZXRiwiI8MTNxQjM6gjN4gzM9YjNiojIklkIs4XXiQXZlh6U4J7bwVmUiwiI4VWZoNFd49WYHJCLiUGbiFGV43mdpBlIbpjInxmZiwSZzxWYmpjIyNHZisnOiwmbBJye0ICRiwiIt22Q";

  3. const spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
  4. const sheet = spread.getActiveSheet();

  5. const arr = [
  6.     { text: "项1", value: 'item1' },
  7.     { text: "项2", value: 'item2' },
  8.     { text: "项3", value: 'item3' },
  9.     { text: "项4", value: 'item4' },
  10.     { text: "项5", value: 'item5' },
  11.     { text: "项6", value: 'item6' },
  12.     { text: "项7", value: 'item7' },
  13.     { text: "项8", value: 'item8' },
  14.     { text: "项9", value: 'item9' },
  15.     { text: "项10", value: 'item10' }
  16. ];

  17. spread.suspendPaint();
  18. sheet.setText(0, 0, "Custom list");

  19. const combo = new GC.Spread.Sheets.CellTypes.ComboBox();
  20. combo.items(arr).editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value);
  21. combo.allowFloat(false);

  22. const values = arr.map(v => v.value).join();
  23. const dvList = new GC.Spread.Sheets.DataValidation.createListValidator(values);

  24. let table = sheet.tables.add("table1", 2, 1, 3, 4);
  25. table.rowFilter().filterButtonVisible(0, false);
  26. sheet.addSpan(3, 1, 1, 2)
  27. sheet.addSpan(4, 1, 1, 2)
  28. sheet.addSpan(5, 1, 1, 2)
  29. sheet.addSpan(6, 1, 1, 2)
  30. sheet.addSpan(7, 1, 1, 2)
  31. const columnName = table.getColumnName(0);
  32. const col1 = table.getColumn(columnName);
  33. sheet.setCellType(2, 0, combo, GC.Spread.Sheets.SheetArea.viewport);
  34. sheet.setDataValidator(2, 0, 1, 1, dvList, GC.Spread.Sheets.SheetArea.viewport);

  35. col1.cellType(combo);
  36. sheet.setDataValidator(3, 1, 2, 1, dvList, GC.Spread.Sheets.SheetArea.viewport);
  37.   
  38. spread.resumePaint();
复制代码
sheet.setCellType(2, 0, combo, GC.Spread.Sheets.SheetArea.viewport);
和列表验证规则
const dvList = new GC.Spread.Sheets.DataValidation.createListValidator(values);
sheet.setDataValidator(2, 0, 1, 1, dvList, GC.Spread.Sheets.SheetArea.viewport);
只能二选一么


附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

列表验证会在单元格被选中的时候出现下拉按钮,出现在单元格右侧,这是列表验证的正常表现。 如果18.0.0在生产环境没有出现列表验证的按钮,首先要确认一下单元格是不是已经被设置了列表验证。

9 个回复

最佳答案
最佳答案
Matthew.Xue
超级版主   /  发表于:2025-12-2 20:11:02
来自 4#
王公子-_- 发表于 2025-12-3 15:08
生产环境是18.0.0版本,表现是单元格不会出现两个下拉按钮,表格列会出现两个按钮,demo是线上链接17.0.8 ...

列表验证会在单元格被选中的时候出现下拉按钮,出现在单元格右侧,这是列表验证的正常表现。
如果18.0.0在生产环境没有出现列表验证的按钮,首先要确认一下单元格是不是已经被设置了列表验证。
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-12-3 14:50:52
2#
您好,我使用您的代码在18.2.4并没有复现出您说的这种现象,请问您目前使用的是什么版本呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
王公子-_-
初级会员   /  发表于:2025-12-3 15:08:28
3#
本帖最后由 王公子-_- 于 2025-12-3 15:10 编辑
Matthew.Xue 发表于 2025-12-3 14:50
您好,我使用您的代码在18.2.4并没有复现出您说的这种现象,请问您目前使用的是什么版本呢?

生产环境是18.0.0版本,表现是单元格不会出现两个下拉按钮,表格列会出现两个按钮,demo是线上链接17.0.8版本

另外我说的现象其实就是您视频中录制的效果

单元格内的下拉列表展示的是text,然后列表验证规则产生的下拉按钮是浮动在单元格后面的,然后产生的下拉列表展示的是值
还是说这就是列表验证器的表现,如果不要出现这个效果,就不要设置列表验证器
18.0.0版本在生产环境上的表现 单元格不会出现后面的列表验证规则设置的浮动按钮

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
王公子-_-
初级会员   /  发表于:2025-12-3 16:44:57
5#
Matthew.Xue 发表于 2025-12-3 16:22
列表验证会在单元格被选中的时候出现下拉按钮,出现在单元格右侧,这是列表验证的正常表现。
如果18.0.0 ...

理论上从代码上单元格应该是设置了,因为是必走的逻辑,之前是在if/else之外的逻辑,后来我发现范元格没问题表格列不行做的修改,只有单元格才设置列表验证

刚才打断点看了一下确实单元格设置了列表验证

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-12-3 18:00:16
6#
这样可能不太准,因为随后的代码可能会将列表验证去除掉,建议将spread实例挂载到window上,在所有代码执行完毕之后再去看单元格是否设置了列表验证。如果仍然无法解决,我明天再帮您看一下这个问题。
回复 使用道具 举报
王公子-_-
初级会员   /  发表于:2025-12-3 19:48:13
7#
Matthew.Xue 发表于 2025-12-3 18:00
这样可能不太准,因为随后的代码可能会将列表验证去除掉,建议将spread实例挂载到window上,在所有代码执行 ...

其实我只有这一处设置数据验证的操作,之前重复设置验证spread渲染报错才在设置前清除一下数据验证再设置,虽然这么做无效,我的代码里没有其他设置或清除验证规则地方了,不过我不知道spread会不会因为其他操作清除我设置的验证规则,不过我不想要这两个下拉按钮,所以把list验证全部去掉了
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-12-4 17:37:37
8#
王公子-_- 发表于 2025-12-3 19:48
其实我只有这一处设置数据验证的操作,之前重复设置验证spread渲染报错才在设置前清除一下数据验证再设置 ...

好的,有两个下拉其实也没有什么意义,保留一个就可以了。
回复 使用道具 举报
王公子-_-
初级会员   /  发表于:4 天前
9#
Matthew.Xue 发表于 2025-12-4 17:37
好的,有两个下拉其实也没有什么意义,保留一个就可以了。


确实没设置上,单元格没有传入rowCount,执行时也没有设置默认值const { row, col, rowCount = 1 } = range;

执行这句语句时rowCount是undefined

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:4 天前
10#
王公子-_- 发表于 2025-12-10 15:25
确实没设置上,单元格没有传入rowCount,执行时也没有设置默认值const { row, col, rowCount = 1 } = r ...

好的,那这边就先结贴了,有其他问题欢迎发新帖~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部