找回密码
 立即注册

QQ登录

只需一步,快速开始

yin_tb

高级会员

53

主题

200

帖子

1067

积分

高级会员

积分
1067

微信认证勋章

[已处理] 对Spread的建议

yin_tb
高级会员   /  发表于:2022-4-27 11:31  /   查看:3302  /  回复:5
1金币
本帖最后由 yin_tb 于 2022-4-27 11:33 编辑

  如果做了一个表,里面有100多个单元格,都有自定义公式,公式的功能是打开数据库连接,从数据库中取数返回值。
取数后,存成本地文件  .xml 格式。因为要存储其它属性,存成Excel不行,会丢失很多属性。

问题:现实中,可能系统发生了新业务,用户可能随时在程序中打开上面计算的xml表,1、查看数据,2、再重新计算。但是,用户打开这个xml文件时,系统就开始计算了。
由于有公式的单元格很多,打开文件时,类似于死机,就算能用多线程,提供进度。
我发现的原理是:只要单元格有公式,它就计算。对不对?


这些值,是公式计算出来的,
如果,你清除formual,text或value会丢失,单元格空白了,相当于,单元格的值是飘浮的,绑定到公式的。


系统有个AutoCalculation属性,我理解的是,它的作用是:当相互引用的单元格,数据有变化时,是否重算,并不是管理单元格有公式时,是不是计算的。

我的建议是,
1、增加个FormualValue属性,和text、value同级,保存公式的值,不计算时,也能显示上次的结果。
2、真的能有个AutoComputer这样的计算Boolen类型的属性,为False时,就算有公式,也不计算,保持原值。

我上面说的对不对?是不是系统本身就能完成上面的功能?只是我没找到?



最佳答案

查看完整内容

你可以试一下这个方法,看看对自定义公式是否生效 fpSpread1.ActiveSheet.SuspendFormulaParsing(); 要还原的话,再用 fpSpread1.ActiveSheet.ResumeFormulaParsing();

5 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-4-27 11:31:16
来自 4#
你可以试一下这个方法,看看对自定义公式是否生效
fpSpread1.ActiveSheet.SuspendFormulaParsing();

要还原的话,再用
fpSpread1.ActiveSheet.ResumeFormulaParsing();
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-4-27 12:32:45
2#
收到,这个AutoCalculation确实是控制自动计算的,不自动计算自然没有结果,目前不会保留计算结果值。
这个需求我会和研发反馈
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2022-4-27 12:54:35
3#
我测试过,比如,.cells(0,0).formual=A3+A4;  这时,如果 AutoCalculation为false,如果手动编辑了A3的值,cells(0,0)的值 不变,AutoCalculation对这种关联有作用。如果我某个单元格的值,是自定义函数取的,AutoCalculation的false不起作用,函数仍然执行,这一点,我可以确定。而且,设计器中,对于AutoCalculation的说明,也是说对关联引用起作用,并不是对全局的计算与否起作用,这个我是确信我说的没错的。所以,上面我说的    建义1和2的FormualValue,AutoComputer这两个属性,希望提交上去,认真考虑,我觉得是有价值的。虽然,我临时用别的办法解决了。
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2022-4-27 14:40:46
5#
好的,谢谢,我试试吧。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-4-27 15:06:56
6#
嗯,不客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部