如何增强Java Excel 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(R) Core(TM) i7-10850H CPU @ 2.70GHz 2.71 GHz,6 核,12 线程
  • 安装的物理内存 (RAM) - 16.00 GB

测试数据

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

Excel 导入

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

  • DoNotAutoFitAfterOpened
  • DoNotRecalculateAfterOpened

测试代码

Java 复制代码
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

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

测试代码

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

相关推荐
CodeStats16 分钟前
【Spring事务】Spring事务注解 @Transactional 完整体系:从 MySQL 隔离级别到 MyBatis 原理详解
java·spring·mybatis·事务·transactional
我命由我123451 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
颜酱2 小时前
06 | 把 meta_config 同步进 MySQL(生成阶段)
前端·人工智能·后端
都叫我大帅哥3 小时前
从Python到Java:为什么企业级Agent最终会选择Java?
java·ai编程
wanderist.3 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
IT_陈寒3 小时前
SpringBoot自动配置坑了我一周,原来问题这么蠢!
前端·人工智能·后端
iOS开发上架哦4 小时前
Android代码混淆与iOS加固技术详解
后端·ios
腻害兔5 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
Alan_6915 小时前
商品详情优化三板斧-拆分-多级缓存-GC调参
后端·缓存
Conan在掘金5 小时前
ArkTS 进阶之道(3):为哈禁解构声明?类型一眼可见 vs 推断链断裂
后端