找回密码
 立即注册

QQ登录

只需一步,快速开始

树上摇摆的猪

注册会员

3

主题

10

帖子

37

积分

注册会员

积分
37
最新发帖
树上摇摆的猪
注册会员   /  发表于:2022-2-11 10:54  /   查看:2132  /  回复:6
1金币
当前项目上有用到GcExcel5.0.1,因为需要提升pov表格打开的速度,我们采用提前打开源文件将workbook对象保存起来,打开pov文件的时候采用 worksheet.copy(workbookClone);克隆的方式,但是这种打开方式耗时仍没有达到预期耗时在8s,excel文件大小15M,sheet页58个,下图中为各sheet页公式引用的关系图,有10多个sheet页通过公式引用的其他sheet页超过30个,我们试验公式引用数量多是耗时的主要原因,针对这种表格提升打开速度,通过循环每个sheet页copy到新的workbook的方式是否可行,请问还有什么优化打开速度的方法 image.png130124510.png

以下是文件拷贝的代码
image.png390857543.png
拷贝整个workbook耗时在8s左右
image.png204507445.png

最佳答案

查看完整内容

这边调研发现由于主要的耗时是在复制,这边可以提供一个新思路可以尝试一下:可以创建一个新的工作簿,并打开ZJ-test002_2.xlsx而不是复制它。 例如: Workbook workbook = new Workbook(); workbook.open("ZJ-test002_2.xlsx", openOptions); Workbook workbook1 = new Workbook(); workbook1.open("ZJ-test002_2.xlsx", openOptions); Workbook workbook2 = new Workbook(); workbook2.open("ZJ-test002_2.xlsx", openO ...

6 个回复

正序浏览
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-2-11 17:31:58
6#
树上摇摆的猪 发表于 2022-2-11 16:25
我们使用的场景是根据组织,年度,部门等pov维度来切换打开文件,这些文件实际上是由一个源excel文件生成, ...

了解了,我这边再调研看下是否有优化的空间或者办法,此贴先改为保留处理,有进展会在本帖更新(DOCXLS-5510)
回复 使用道具 举报
树上摇摆的猪
注册会员   /  发表于:2022-2-11 16:25:09
5#
我们使用的场景是根据组织,年度,部门等pov维度来切换打开文件,这些文件实际上是由一个源excel文件生成,为了实现不同pov维度下的数据隔离,我们在用户触发pov维度切换的时候需要从源excel文件中复制一个打开,下一步查数据库表,将表数据写入文件,最后执行公式计算,将sheet页表单数据给前端,整个过程耗时大概在15s左右,文件复制占了8s,计算占了4s。我们就是希望能在这两个耗时比较大的步骤上进一步压缩时间
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-2-11 15:54:50
4#
树上摇摆的猪 发表于 2022-2-11 14:58
资料已上传,下面的是服务器硬件信息

这边测试也是在7~8秒左右,初步来看主要是表单的内容以及公式较多。哪怕直接用excel打开这个文件,也有一定的耗时。综合分析来看这个耗时属于一个合理的范围,请问你的预期是多长时间以及具体需求是什么呢?
回复 使用道具 举报
树上摇摆的猪
注册会员   /  发表于:2022-2-11 14:58:02
3#
资料已上传,下面的是服务器硬件信息
image.png936372680.png

ZJ-test002_2.zip

9.94 MB, 下载次数: 110

jar.zip

16.9 MB, 下载次数: 82

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-2-11 12:07:27
2#
你好,请问现在的具体耗时大概是多少呢?如果表单上存在大量的公式引用,那么在复制的时候可能会存在一些耗时的情况。建议提供一个可运行的简单demo和文件,我们这边测试调研一下具体耗时以及优化的方案。
回复 使用道具 举报
最佳答案
最佳答案
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-2-11 10:54:42
来自 7#
这边调研发现由于主要的耗时是在复制,这边可以提供一个新思路可以尝试一下:可以创建一个新的工作簿,并打开ZJ-test002_2.xlsx而不是复制它。

例如:
Workbook workbook = new Workbook();
workbook.open("ZJ-test002_2.xlsx", openOptions);
Workbook workbook1 = new Workbook();
workbook1.open("ZJ-test002_2.xlsx", openOptions);
Workbook workbook2 = new Workbook();
workbook2.open("ZJ-test002_2.xlsx", openOptions);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部