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

QQ登录

只需一步,快速开始

.fly

注册会员

3

主题

18

帖子

57

积分

注册会员

积分
57
最新发帖
.fly
注册会员   /  发表于:2025-4-10 18:43  /   查看:109  /  回复:6
本帖最后由 Wilson.Zhang 于 2025-4-16 08:51 编辑

产品:SpreadJS
版本:17.1.5
调研编号:GCNSJS-27807
Last Review:2025-04-16
当前进展:实例引用导致,将formulaValidator创建代码移至doit方法内部即可。

复现代码如下。使用其他validator(如list)就不会引发问题
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app" style="width:1000px;height:1000px"></div>
</body>
<script type="text/javascript" src="../static/SpreadJS/scripts/gc.spread.sheets.all.17.1.5.min.js"></script>
<script type="text/javascript" src="../static/SpreadJS/scripts/resources/zh/gc.spread.sheets.resources.zh.17.1.5.min.js"></script>
<script type="text/javascript" src="../static/SpreadJS/scripts/gc.spread.sheets.all.17.1.5.min.js"></script>
<script>
    const validator =GC.Spread.Sheets.DataValidation.createFormulaValidator('A1>0')
    let workbook
function doit(){
        const container = document.getElementById('app');
        workbook = new GC.Spread.Sheets.Workbook(container, {});
        sheet=workbook.getActiveSheet()
        sheet.setDataValidator(0,0,validator)
    }
    doit()
    workbook.destroy()
    doit()
</script>
</html>


gc.spread.sheets.all.17.1.5.min.js:900
Uncaught TypeError: Cannot read properties of null (reading 'setCalcService')
at n.getCalcService (gc.spread.sheets.all….min.js:900:1212410)
at a.initExpression (gc.spread.sheets.all….5.min.js:900:51801)
at a.getFormulaString (gc.spread.sheets.all….5.min.js:900:52389)
at a.formula (gc.spread.sheets.all….5.min.js:900:52765)
at String.<anonymous> (gc.spread.sheets.all….5.min.js:900:37503)
at k.y0 [as each] (gc.spread.sheets.all….min.js:900:2557650)
at a.Kt (gc.spread.sheets.all….5.min.js:900:37454)
at a.toJSON (gc.spread.sheets.all….5.min.js:900:70181)
at gc.spread.sheets.all….min.js:900:1579360
at Array.forEach (<anonymous>)
n.getCalcService @ gc.spread.sheets.all.17.1.5.min.js:900
a.initExpression @ gc.spread.sheets.all.17.1.5.min.js:900
a.getFormulaString @ gc.spread.sheets.all.17.1.5.min.js:900
a.formula @ gc.spread.sheets.all.17.1.5.min.js:900
(匿名) @ gc.spread.sheets.all.17.1.5.min.js:900
y0 @ gc.spread.sheets.all.17.1.5.min.js:900
Kt @ gc.spread.sheets.all.17.1.5.min.js:900
a.toJSON @ gc.spread.sheets.all.17.1.5.min.js:900
(匿名) @ gc.spread.sheets.all.17.1.5.min.js:900
C.toJSON @ gc.spread.sheets.all.17.1.5.min.js:900
C.clone @ gc.spread.sheets.all.17.1.5.min.js:900
T.w6t @ gc.spread.sheets.all.17.1.5.min.js:900
setDataValidator @ gc.spread.sheets.all.17.1.5.min.js:900
doit @ test.js:8
(匿名) @ test.js:12

6 个回复

倒序浏览
Wilson.Zhang
超级版主   /  发表于:2025-4-11 12:31:09
沙发
您好!参考您提供的代码片段复现了问题现象,帮您调研下,待有结论向您同步。顺便请教下,您的实际使用场景是什么,这个信息有助于调研。
回复 使用道具 举报
.fly
注册会员   /  发表于:2025-4-11 13:17:01
板凳
本帖最后由 .fly 于 2025-4-11 13:32 编辑
Wilson.Zhang 发表于 2025-4-11 12:31
您好!参考您提供的代码片段复现了问题现象,帮您调研下,待有结论向您同步。顺便请教下,您的实际使用场景 ...

利用数据验证+表格进行表单数据录入。

在切换到不同录入表单时,由于事件绑定等逻辑有较大差别,销毁workbook重新创建,但创建好的validator复用。

我这边通过每次创建workbook时重新创建validator临时修复。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-4-11 14:22:23
地板
.fly 发表于 2025-4-11 13:17
利用数据验证+表格进行表单数据录入。

在切换到不同录入表单时,由于事件绑定等逻辑有较大差别,销毁w ...

调研编号为GCNSJS-27807。

您提到的“表格”是指Table还是Worksheet?“表单”指的应该是Worksheet吧?

您将事件绑定到Workbook了吗?如果对每个Worksheet需要依赖的事件不一样,可以对每个事件分别绑定事件并定义相应的事件处理函数。
回复 使用道具 举报
.fly
注册会员   /  发表于:2025-4-11 15:03:59
5#
本帖最后由 .fly 于 2025-4-11 15:10 编辑
Wilson.Zhang 发表于 2025-4-11 14:22
调研编号为GCNSJS-27807。

您提到的“表格”是指Table还是Worksheet?“表单”指的应该是Worksheet吧 ...

谢谢您的建议。一部分事件(如buttonClicked、ValidationError)绑定到了workbook,我看看能不能绑到sheet


——buttonClicked貌似不行
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-4-11 19:47:18
6#
.fly 发表于 2025-4-11 15:03
谢谢您的建议。一部分事件(如buttonClicked、ValidationError)绑定到了workbook,我看看能不能绑到shee ...

也就是说绑定在Workbook上的事件并非在每个sheet都需要监听的事件吗?都有些什么事件?可以看看在事件被触发时可否通过当前sheet信息阻断事件继续执行。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-4-16 08:47:32
7#
您好!经调研,了解到实例引用导致的问题。将formulaValidator的创建代码移到doti方法内使用即可,如下图所示:
1744764385749.png715550231.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部