如何增强Java GCExcel API 的导入和导出性能

前言

GrapeCity Documents for Excel (以下简称GcExcel) 是葡萄城公司的一款服务端表格组件,它提供了一组全面的 API 以编程方式生成 Excel (XLSX) 电子表格文档的功能,支持为多个平台创建、操作、转换和共享与 Microsoft Excel 兼容的电子表格;从而使其成为解决所有电子表格挑战的完美解决方案。

本博客主要介绍了加载 Excel (XLSX) 文件时导入选项的时间性能以及使用导出选项优化的文件大小。测试是在一些 Excel 文档上进行的,这些文档包含真实的函数、公式和多行多列的数据。

测试机配置

  • 操作系统 - Microsoft Windows 10 Professional
  • 版本 - 21H2(OS Version 19044.1645)
  • 系统类型 - x64
  • 处理器 - Intel® Core™ i7-10850H CPU @ 2.70GHz 2.71 GHz,6 核,12 线程
  • 安装的物理内存 (RAM) - 16.00 GB

测试数据

Excel 文件,其中包含简单和复杂的公式、大量数据记录、多列数据、样式、命名对象等。

Excel 导入

GcExcel 在导入 Excel文档时提供两个选项:

  • DoNotAutoFitAfterOpened
  • DoNotRecalculateAfterOpened

测试代码

String outFilePath = Paths.get("Files", "Output", "GcExcel").toString();
String inputFilePath = Paths.get("Files", "Input").toString();
String fileName = "output.xlsx";Workbook workbook = new Workbook();
long start = System.currentTimeMillis();// NO EXPORT OPTION
workbook.open(inputFilePath);// EXPORT OPTIONS
XlsxOpenOptions openOptions = new XlsxOpenOptions();
openOptions.setDoNotAutoFitAfterOpened(true);
openOptions.setDoNotRecalculateAfterOpened(true);
workbook.open(inputFilePath, openOptions);long stop = System.currentTimeMillis();
double openTime = (double) (stop - start) / 1000;workbook.save(Paths.get(outFilePath, fileName).toString());

测试指标

针对上述测试文档(使用和不使用导入选项)计算的加载时间结果如下所示:

Excel 导出

GcExcel 允许使用以下选项控制未使用的样式和命名对象以及没有任何数据的单元格区域的导出:

  • ExcludeUnusedStyles
  • ExcludeUnusedNames
  • ExcludeEmptyRegionCells

这些选项允许您选择是保留还是丢弃导出文档中不需要的项目。因此,它有助于优化保存文件的大小。

测试代码

String outFilePath = Paths.get("Files", "Output", "GcExcel").toString();
String inputFilePath = Paths.get("Files", "Input").toString();
String fileName = "output.xlsx";
Path path = Paths.get(outFilePath, fileName);Workbook workbook = new Workbook();
workbook.open(inputFilePath);// NO EXPORT OPTION
workbook.save(path.toString());// EXPORT OPTIONS
XlsxSaveOptions saveOptions = new XlsxSaveOptions();
saveOptions.setExcludeUnusedNames(true);
saveOptions.setExcludeUnusedStyles(true);
saveOptions.setExcludeEmptyRegionCells(true);
saveOptions.setIgnoreFormulas(true);
workbook.save(path.toString(), saveOptions);File outputFile = new File(path.toString());
long size = outputFile.length();
BigDecimal sizeInKB = new BigDecimal(size).divide(new BigDecimal(1024));
BigDecimal sizeInMB = sizeInKB.divide(new BigDecimal(1024), 2, BigDecimal.ROUND_HALF_UP);
System.out.println("Size in MB: " + sizeInMB);

测试指标

保存文档后的文件大小。

使用和不使用导出选项保存这些测试文档后的文件大小如下所示:

总结

通过上述的测试结果表明,在使用了GcExcel之后导入不同文件的速度快了接近1秒,同时导出文件的大小也缩小了一半,显著提升了数据处理和文件操作的效率。这使得用户能够更快地处理大量数据并生成更精简、高效的文件输出。以上就是针对不同Excel文件的导入导出测试,如果您想了解更多详细信息,欢迎点击这里查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/638434.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端工程化02-复习jQuery当中的插件开发

2、jQuery插件开发 在我们开发的时候、有时候jQuery提供的方法并不能满足我们的需求,如果我们想给jQuery扩展一些其他的方法,那这种情况下,可能会需要写一个插件 jQurey官网:jquery.com 例如一些、图片懒加载插件、滚动的插件、…

自动售卖团餐:借助智享直播AI实景无人直播系统,团餐自动售卖,无需人工参与,省时高效。

在科技飞速发展的今天,直播行业迎来了一场前所未有的变革。过去,传统的直播方式需要大量设备和人力投入,然而如今,一款名为"智享直播"的AI实景无人直播系统正以其简单、有趣的特性改变着这一局面。仅仅凭借一部手机&…

vue项目前端axios跨域请求处理问题

在我的服务器里面新建了一个txt文档,但在vue项目里面对这个文档发起请求的时候因为是ip地址请求,跨域请求失败,在配置了vue.config.js的请求代理后得以解决 报错示例: 解决方法: 1、在vue.config.js中配置跨越请求代…

Netty学习——实战篇6 ProtoBuf实战-单类型数据

1 ProtoBuf实战:需求 编程程序,使用ProtoBuf完成如下功能 1、客户端发送一个Student POJO对象到服务器(通过ProtoBuf编码) 2、服务端能接收Student POJO对象,并显示信息(通过ProtoBuf解码) 1.1 编写Student.proto文件 首先在pom.xml中导入pr…

【网络协议】 TCP与UDP协议区别及应用场景深度分析

1. TCP与UDP简介 1.1 TCP 1.1 定义 TCP(TransmissionControl Protocol)传输控制协议。 是一种可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应…

52-M.2 E Key-WIFIbluetooth模块电路设计

视频链接 M.2 E Key-WIFI & bluetooth 模块电路设计01_哔哩哔哩_bilibili M.2 E Key-WIFI&bluetooth模块电路设计 1、WIFI&bluetooth模块 1.1、WiFi&bluetooth模块(京东) AX200和9260这两个型号只支持win10 64位的系统! 随着最新的…

基于非线性控制策略的电力电子电路——DC-DC电路的3种滑模控制器【MATLAB/simulink】

第一种,滞环滑模控制器Buck电路 在滑模控制系统中,采用滞环技术,直接将切换函数转换成开关控制信号,滞环技术被看做一种降低系统结构的切换频率的调制方法,业界也把基于滞环滑模技术实现的滑模控制称为直接滑模控制技…

# 从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境(1)

从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境(1) 段子手168 1、打开 idea 创建父工程 创建 artifactId 名为 spring_cloud_demo 的 maven 工程。 --> idea --> File --> New --> Project --> Ma…

基于MNIST的手写数字识别

上次我们基于CIFAR-10训练一个图像分类器,梳理了一下训练模型的全过程,并且对卷积神经网络有了一定的理解,我们再在GPU上搭建一个手写的数字识别cnn网络,加深巩固一下 步骤 加载数据集定义神经网络定义损失函数训练网络测试网络 …

Android 性能优化之黑科技开道(二)

3. 其它可以黑科技优化的方向 3.1 核心线程绑定大核 3.1.1 定义 核心线程绑定大核的思路也很容易理解,现在的 CPU 都是多核的,大核的频率比小核要高不少,如果我们的核心线程固定运行在大核上,那么应用性能自然会有所提升。 核…

new[]与delete[]

(要理解之前关于new,delete的一些概念,看​​​​​​ CSDN) 引子: 相比new,new[]不仅仅是个数的增加,还有int大小记录空间的创建, 下图中错误的用模拟多个new来替代new[],释放步…

Git 原理及使用 (带动图演示)

文章目录 🌈 Ⅰ Git 安装🌙 01. Linux - centos 🌈 Ⅱ Git 工作区、暂存区和版本库🌙 01. 认识工作区、暂存区和版本库🌙 02. 使用 Git 管理工作区的文件 🌈 Ⅲ Git 基本操作🌙 01. 创建本地仓库…