如何增强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文件的导入导出测试,如果您想了解更多详细信息,欢迎点击这里查看。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[计算机效率] 网站推荐:图片编辑类

4.4 图片编辑类 在数字化时代,图片编辑已成为我们生活和工作中不可或缺的一部分。为了帮助大家更高效、更专业地进行图片编辑,这里推荐一系列优质的在线图片编辑网站。 这些网站不仅拥有直观易用的操作界面,更提供了丰富的编辑功能和素材资源…

jenkins 部署 vue 项目

jenkins 部署 vue 项目 环境 系统:CentOS7.9 Jenkins:最新LTS版本 nginx: 1.24.x gitLab: 打包机:jenkins所在服务器 目标机器:nginx所在服务器 jenkins部署配置 关键脚本 #node -v #已经安装node_module就无需执行install安…

快排非递归与计数排序

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 收入专栏:初阶数据结构_LaNzikinh篮子的博客-CSDN博客 文章目录 前言一.快速排序非递归二.数据结构栈与内存栈…

【埋点探针】微信小程序SDK安装

一、下载微信小程序SDK埋点代码 选择Wechat,复制sdk代码 在项目根目录下,创建sdk文件,webfunny.event.js 二、在app.js文件中,引入埋点SDK代码 首先引入sdk代码 require("./webfunny.event.js")引入兼容代码&#x…

职业技能鉴定服务中心(新闻系统+证书查询系统)

后端采用ThinkPHP8,最新tp框架 前端采用divcss布局 数据库采用MySQL 采用三种技术实现新闻系统和证书查询系统 源码:git clone https://gitee.com/3539949703/certificate-website.git 效果图如下:

一套在线画图工具(突突图 Procviz)

突突图(Procviz)是一款面向跨平台作图平台。支持流程图、思维导图、框架图、组织架构图、ER图、网络拓扑图等。实现了多团体同时协作,实时同步,解决跨地域合作作图的问题。平台提供了丰富的模板和素材库,轻松完成作图,效率翻倍。 …

docker pull速度慢解决办法

在使用 Docker 时遇到拉取镜像速度慢的问题,可以使用国内的镜像源可以提高下载速度。 使用阿里镜像加速器 Docker 配置文件位于 /etc/docker/daemon.json。如果文件不存在,可以手动创建它。将以下内容添加到配置文件中: 整体复制执行命令&…

【设计模式】单例模式|最常用的设计模式

写在前面 单例模式是最常用的设计模式之一,虽然简单,但是还是有一些小坑点需要注意。本文介绍单例模式并使用go语言实现一遍单例模式。 单例模式介绍 简介 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。 使用场景&#…

web自动化系列-selenium的3种弹框操作(十二)

在进行功能测试时 ,经常会遇到出现各种的弹出的提示 ,比如删除数据给出提示 、做某个操作时也会弹框给出一些友好提示 ,因为这些弹框都是做web操作时的一些常用组件 ,所以,selenium就不得不支持这些组件 。 1.弹框介绍…

HarmonyOS开发环境搭建 移动开发 鸿蒙开发 ArkTS

📜目录 💡 环境搭建 🚀安装nodejs 🤵安装ohpm 🍔安装SDK 💥Emulator安装 🌶️新建ArkTs项目 🏆️ArkTS语言 ✨️基本语法 🎈 声明式UI描述 🍱组件 …

【C语言__函数栈帧的创建和销毁__复习篇9】

目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 前言 本篇主要讨论以下问题: 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的,传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数…

【Linux 进程间通信】管道(三)

文章目录 1.管道的五种特征2.管道的四种情况 1.管道的五种特征 ①🍎匿名管道只能用于有血缘关系的进程之间进行通信(爷孙进程之间可以进行通信),常用于父子之间进行通信; ②🍎管道内部,自带进…

若依后台管理系统(ruo-web)修改主题色,更改颜色值 (2024-04-22)

1、修改文件 setting.js 2、修改的文件路径 ruoyi-web/src/store/modules/setting.js 3、默认主题颜色 #409EFF,改新的颜色值,刷新就好了 4、修改主题颜色 还可以用户自己更换,但这个更换只是存储在浏览器中,清除缓存之后还是…

【ARM 裸机】C 语言 led 驱动

前面刚学习了汇编 led 驱动的编写和验证,现在开始就要进入 C 语言 led 驱动编写与验证了 ! 1、C 语言运行环境构建 1.1、设置处理器模式 使 6ULL 处于 SVC 模式下,之前已经提到了处理器的九种模式,参考:【ARM 裸机】汇编 led 驱…

【Linux系统编程】第六弹---权限的概念

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、什么是权限 2、权限的本质 3、Linux中的用户 4、Linux中文件的权限 4.1、文件访问者的分类(角色) 4.2、文件类型和访问权…

计算机经典黑皮书分享

计算机经典黑皮书是一套计算机科学丛书,其中包含了多本计算机科学领域的经典教材 提供了全面的知识体系:黑皮书涵盖了计算机科学的多个领域,如计算机组成与设计、操作系统、数据库、人工智能等。它们深入浅出地介绍了相关领域的基本概念、原…

WAF攻防-漏洞发现协议代理池GobyAwvsXray

知识点 1、Http/s&Sock5协议 2、Awvs&Xray&Goby代理 3、Proxifier进程代理使用 4、Safedog&BT&Aliyun防护在漏洞发现中,WAF会对三个方向进行过滤拦截: 1、速度频率问题(代理池解决) 2、工具的指纹被识别&am…

从零开始学 langchain 之搭建最小的 RAG 系统

RAG 可以说是 23 年以来到现在,最为火热的大模型应用技术了,很多人都有了很多经典的研究。而对于新人来说,有些代码十分复杂,导致只看表象并不理解其原理。今天,就利用 langchain 和大家一起搭建一个最简单的 RAG 系统…

JAVA学习笔记27(异常)

1.异常 ​ *异常(Exception) ​ *快捷键 ctrl alt t 选中try - catch ​ *如果进行了异常处理,那么即使出现了异常,程序可以继续执行 1.1 基本概念 ​ *在Java语言中,将程序执行中发生的不正常情况称为"异常"(开发过程中的语…

Xinlinx原语在哪查看如何使用/原语示例

1.打开Vivado 2.点击Tools,选择Language Templates 3.选择Language类型、Device Primitive Instantiation(原语)、Kintex-7(芯片系列),之后可以选择自己需要使用的类型,这里以分布式RAM为例&am…