找回密码
 立即注册

QQ登录

只需一步,快速开始

chaoren
初级会员   /  发表于:2018-11-12 10:59:50
11#
KevinChen 发表于 2018-11-12 10:32
1、你是怎样选择的筛选区域?

2、造成计算精度问题主要是由于javascript的数字数据类型只有浮点型的原因 ...

回1: image.png38550719.png 这个是未筛选的状态,选择前面3个空格,用getselection()可以获取到准确的3个单元格,筛选掉硕士 image.png596755065.png ,依旧选择前3个单元格,但是获取到的是5个单元格,他把隐藏的2个硕士单元格一起选中,
回2:如果不想设置单元格格式化,是无法做到的是吗
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-11-12 11:57:40
12#
1、这是Spread JS的选择策略,因为筛选后不符合条件的行实际上并没有被删除,而是被隐藏了,如果在这里建立选区,隐藏的内容也会被选中,所以需要在数据处理的时候加个判断,代码示例:

  1. sheet.getRowVisible(rowNum);
复制代码


2、设置单元格格式是最简便性能最好的办法,设置格式后,可以使用getText方法获取到格式化后的字符串。

如果不想用单元格格式的方法来解决,只能采用自定义函数或者在函数执行运算前进行预处理的办法,这个没有很好的解决办法,只能case by case地解决。
回复 使用道具 举报
chaoren
初级会员   /  发表于:2018-11-12 14:03:14
13#
KevinChen 发表于 2018-11-12 11:57
1、这是Spread JS的选择策略,因为筛选后不符合条件的行实际上并没有被删除,而是被隐藏了,如果在这里建立 ...

回2:要如何做到函数执行前做预处理,是什么事件可以做到
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-11-12 16:12:53
14#
回2:两种办法。

1、spreadjs 支持挂起公式运算与恢复公式运算的操作,可以使用

  1. // 挂起运算
  2. spread.suspendCalcService(false);
  3. // 恢复运算
  4. spread.resumeCalcService(true);
复制代码


具体可以参考一下SpreadJS的API:
http://help.grapecity.com/spread ... heets.Workbook.html

2、先处理值,再执行recalcAll方法对指定sheet的公式执行重算,这个方法的API地址:

http://help.grapecity.com/spread ... heet~recalcAll.html

另外,您也可以在事件中对值进行后处理,可以使用ValueChanged事件来处理值。
回复 使用道具 举报
chaoren
初级会员   /  发表于:2018-11-13 10:32:19
15#
本帖最后由 chaoren 于 2018-11-13 10:51 编辑
KevinChen 发表于 2018-11-12 16:12
回2:两种办法。

1、spreadjs 支持挂起公式运算与恢复公式运算的操作,可以使用

那我有个疑问,你们是如何通过一个单元格的公式,来获取参与计算的单元格,然后进行公式计算的
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-11-13 11:08:37
16#
公式是通过引用单元格来获取单元格的值的,我这边有个Demo,

演示了怎样通过自定义公式获取到引用的单元格,希望对您有帮助。

我上传一个附件,您参考一下。

CustomFormula_.html

7.37 KB, 下载次数: 271

回复 使用道具 举报
chaoren
初级会员   /  发表于:2018-11-13 12:35:09
17#
KevinChen 发表于 2018-11-13 11:08
公式是通过引用单元格来获取单元格的值的,我这边有个Demo,

演示了怎样通过自定义公式获取到引用的单元 ...

那对于稍微复杂的组合公式,它内部怎么计算的比如公式为“=A1-A2*A3”,这样的是如何计算的
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-11-13 15:29:36
18#
您想实现什么功能?我这边可以试着帮您提出一些解决问题的办法。
回复 使用道具 举报
chaoren
初级会员   /  发表于:2018-11-13 15:51:41
19#
KevinChen 发表于 2018-11-13 15:29
您想实现什么功能?我这边可以试着帮您提出一些解决问题的办法。

我要实现的就是,学生自己输入excel公式,然后算出准确的值,比如学生A3输入一个公式为=A1-A2,A1单元格的值为226.6,A2单元格的值为220,那么我A3所计算的值为6.6,不格式化的,因为小数位对于我们的业务是有影响的,一旦格式化了单元格,那么可能导致小数位的差异而导致业务出错
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-11-13 18:42:25
20#
没有更好的办法了,这个是javascript的机制导致的,

原生函数也不支持运算前获取引用的单元格值,

所以我建议您使用自定义函数来实现,

格式化单元格可以设置保留几位小数,

如果精确3位小数仍然会导致您业务逻辑出错,

只能建议您把小数数据发到后台计算,然后返回前台展示
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部