找回密码
 立即注册

QQ登录

只需一步,快速开始

jyjc 讲师达人认证
高级会员   /  发表于:2021-6-25 15:50  /   查看:3629  /  回复: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, 下载次数: 30

13 个回复

正序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-7 09:17:55
14#
问题已经收到,虽然都是性能问题,但是原因应该不同,我创建了一个新帖子复制了你的问题,
https://gcdn.grapecity.com.cn/showtopic-95490-1-1.html

我这边先测试,然后在新帖中给你回复
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-7-6 19:35:21
13#
反馈一个问题,给大量给Tag赋值,20W单元格,花费了35S,性能较差
image.png401703795.png

var watch = new Stopwatch();
            watch.Start();

            var workbook = new GrapeCity.Documents.Excel.Workbook();
            var currentSheet = workbook.Worksheets[0];
            
            for (var i = 0; i < 15000; i++)
            {
                for (var j = 0; j < 13; j++)
                {
                    var curCell = currentSheet.Range[i + 1, j];
                    curCell.Value = currentSheet.Rows[j];
                    //curCell.Tag = "222222222222222222222222";
                    curCell.Tag = $"{currentSheet.Name}|{i + 1}|{j}";

                }
            }

            watch.Stop();
            Console.WriteLine($"执行耗时:{watch.ElapsedMilliseconds}");
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-1 17:52:46
12#
设置FormulaArray性能问题,这个会作为需求提交给研发,后续会进行优化

GcExcel同SpeadJS一样提供了Tag属性,可以给单元格设置Tag后,在spreadjs中可以读取到
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-7-1 17:21:10
11#
Richard.Ma 发表于 2021-6-28 18:03
我明白你的意思,设置Formula和FormulaArray确实耗时是不同的,FormulaArray耗时较大。在禁用EnableCalcula ...

这里说禁用计算后,设置FormulaArray还是慢,是啥原因了? 暂时没办法从根本上优化,后续有没有优化计划了?

另外补充问题5 :
GcExcel的单元格有没有类似隐藏的属性对象, 能够传递到前端通过Spreadjs中取到这个属性
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-1 10:54:20
10#
你说的FormulaArray禁用后还设置慢,这个是说设置了什么东西呢,
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-7-1 09:06:21
9#
本帖最后由 jyjc 于 2021-7-1 16:30 编辑

禁用计算后,设置FormulaArray数组公式慢是啥原因了?目前没有根本上的优化办法,后续有没有排查修复计划啊?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-6-28 18:03:06
8#
我明白你的意思,设置Formula和FormulaArray确实耗时是不同的,FormulaArray耗时较大。在禁用EnableCalculation后也是如此。暂时没有根本上优化的办法。

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

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



回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-6-28 17:44:56
7#
本帖最后由 jyjc 于 2021-6-28 17:53 编辑

事件、获取依赖单元格已验证可行。
问题四禁用计算这里,我们可能没描述清楚,如下图:开启禁用后,可以分别对下图中的 两行做执行时间对比,数组和非数组公式的设置性能差异较大(不做上述数组公式Copy优化,此处示例场景可按该方式优化,其他场景可能不能这么优化)
image.png513459472.png
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-6-25 19:34:17
5#
本帖最后由 jyjc 于 2021-6-28 09:33 编辑

补充问题4,workbook开启禁用公式计算,但是其中有数组公式的场景,没有禁用效果。该问题也导致worksheet中如果有大量数组公式时,设置数组公式的过程非常耗时,问题2中的场景也是由大量设置数组公式导致
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-6-25 16:38:02
4#

这边确认了一下,以上3个问题目前没有比较好的方法或API。GcExcel本身属于一个后端的控件,没有这种类似于事件的监听以及公式的监听。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部