找回密码
 立即注册

QQ登录

只需一步,快速开始

jyjc 讲师达人认证
高级会员   /  发表于:2021-9-15 15:39  /   查看:1669  /  回复:4
当一个sheet中的公式单元格比较多时,遍历这些公式单元格,获取Value进行取值计算,整个过程是串行可能耗时较长,是否可以多线程并行取Value加速运算,这种方式是否有潜在问题?比如数据计算异常?

4 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-15 16:07:29
沙发
你说的遍历公式单元格,是在EnableCalculation属性为true时来遍历吗,这个时候公式单元格在被遍历时就会先计算,因此速度比较慢,如果关闭计算的话,速度就很快

GCExcel不支持多线程,我不知道你说的多线程并行取value具体是怎么做的。
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-9-15 16:51:54
板凳
是的,设置EnableCalculation =true后, 循环遍历单元格,通过取Value的方式触发计算,如下,并行取value是指, 每个单元格开一个Task取执行取Value

for (var r = 0; r < originRange.RowCount; r++)
                    {
                        for (var c = 0; c < originRange.ColumnCount; c++)
                        {
                            copyWorkbook.Worksheets[i].Cells[r, c].Value = originRange.Cells[r, c].Value;
                        }
                    }
回复 使用道具 举报
jyjc讲师达人认证
高级会员   /  发表于:2021-9-15 17:38:54
地板
Richard.Ma 发表于 2021-9-15 16:07
你说的遍历公式单元格,是在EnableCalculation属性为true时来遍历吗,这个时候公式单元格在被遍历时就会先 ...

“公式单元格在被遍历时就会先计算”
是否可以并行遍历,同时计算,加快计算速度
我们现在的需求,就是将表A计算完毕后,将表A的值拷贝到表B
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-15 18:06:16
5#
本帖最后由 Richard.Ma 于 2021-9-15 18:07 编辑

我建议你直接就用
  1. sheet.UsedRange.Value;
复制代码


这个获取到的就是一个二维数组,不需要每个单元格遍历,计算性能这个目前没有其他的办法提升
多线程这个思路我明天会和研发沟通一下,然后给你回复
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部