找回密码
 立即注册

QQ登录

只需一步,快速开始

jyjc 讲师达人认证
高级会员   /  发表于:2021-6-25 15:50  /   查看:4967  /  回复:13
1金币
本帖最后由 jyjc 于 2021-7-1 17:12 编辑

1、GcExcel是否有单元格值变更事件?(我们需要监控到值改变后做一些处理)

2、GcExcel中是否有高效给单元设置公式的方式,目前测试给一个1.4W行worksheet逐行设置Index Match 多列组合查找公式,耗时9S
3、存在计算关系的单元格,如果其中的值发生变化了,能否获取到其他受影响的单元格,比如 A1= B1+C1,  C1=D1+F1,当 F1变化时,是否有API可以找到C1,A1这两个单元格的坐标? (比如拿到变化的坐标,可以做一些增量更新)
4、设置workbook.EnableCalculation = false; 设置禁用公式计算,但是数组公式不生效,非数组公式才会生效?例如下整个设置过程,如果是循环设置数组公式会非常慢

image.png161817320.png [url=]公式禁用测试.zip[/url]
5、GcExcel的单元格有没有类似隐藏的属性对象, 能够传递到前端通过Spreadjs中取到这个属性


公式禁用测试.zip

121.7 KB, 下载次数: 262

最佳答案

查看完整内容

您好,帮您和研发确认了一下 第一个问题,再worksheet上提供了Changed事件,可以用来跟踪单元格值变化,事件中可以通过e.Range获取变化的Range 第二个问题 实际上你这边目前是给1.4W行设置数组公式,和研发沟通给出了一个优化办法, 由于都是相同的公式,只是单元格相对引用,可以先给第一行这个单元格设置公式,后面的行都用复制方法复制此公式,可以将时间优化到3.9秒 修改你这边代码中135行部分,具体代码如下 第 ...

13 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-6-25 15:50:29
来自 6#
本帖最后由 Richard.Ma 于 2021-6-28 12:34 编辑

您好,帮您和研发确认了一下


第一个问题,再worksheet上提供了Changed事件,可以用来跟踪单元格值变化,事件中可以通过e.Range获取变化的Range
第二个问题
实际上你这边目前是给1.4W行设置数组公式,和研发沟通给出了一个优化办法,
由于都是相同的公式,只是单元格相对引用,可以先给第一行这个单元格设置公式,后面的行都用复制方法复制此公式,可以将时间优化到3.9秒
修改你这边代码中135行部分,具体代码如下
  1.             worksheet2.Range["H2"].FormulaArray =  "=INDEX(Sheet1!$F$2:$F$613,MATCH(I2,Sheet1!$G$2:$G$613,0))";
  2. worksheet2.Range["H2"].Copy(worksheet2.Range[$"H3:H13456"], PasteType.Formulas);
复制代码


第三个问题,
通过Precedents和Dependents可以获取,Precedents是被引用的单元格,Dependents是受影响的单元格,也就是你需要的
https://demo.grapecity.com.cn/sp ... and_dependents.html

第四个问题,
[size=13.0667px]EnableCalculation 对于数组公式来说也是生效的,按照你这种循环,如果不设置workbook.EnableCalculation = false,可能至少需要几十秒以上的时间
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-6-25 16:00:48
2#
问题1:没有对应的方法或者事件。麻烦您描述一下您的使用场景看下是否有其他方案。

问题2:建议您提供对应的demo,我们调研看下是否有对应的优化的方案。
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-6-25 16:25:33
3#
补充问题3
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-6-25 16:38:02
4#

这边确认了一下,以上3个问题目前没有比较好的方法或API。GcExcel本身属于一个后端的控件,没有这种类似于事件的监听以及公式的监听。
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-6-25 19:34:17
5#
本帖最后由 jyjc 于 2021-6-28 09:33 编辑

补充问题4,workbook开启禁用公式计算,但是其中有数组公式的场景,没有禁用效果。该问题也导致worksheet中如果有大量数组公式时,设置数组公式的过程非常耗时,问题2中的场景也是由大量设置数组公式导致
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-6-28 17:44:56
7#
本帖最后由 jyjc 于 2021-6-28 17:53 编辑

事件、获取依赖单元格已验证可行。
问题四禁用计算这里,我们可能没描述清楚,如下图:开启禁用后,可以分别对下图中的 两行做执行时间对比,数组和非数组公式的设置性能差异较大(不做上述数组公式Copy优化,此处示例场景可按该方式优化,其他场景可能不能这么优化)
image.png513459472.png
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-6-28 18:03:06
8#
我明白你的意思,设置Formula和FormulaArray确实耗时是不同的,FormulaArray耗时较大。在禁用EnableCalculation后也是如此。暂时没有根本上优化的办法。

如果可以通过设置公式来实现需求,就不要设置FormulaArray,

通过Copy来优化目前是针对于数组公式能给出的性能优化方案



回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-7-1 09:06:21
9#
本帖最后由 jyjc 于 2021-7-1 16:30 编辑

禁用计算后,设置FormulaArray数组公式慢是啥原因了?目前没有根本上的优化办法,后续有没有排查修复计划啊?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-1 10:54:20
10#
你说的FormulaArray禁用后还设置慢,这个是说设置了什么东西呢,
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部