终于有一款组件可以全面超越 Apache POI
在 GrapeCity Documents 出现以前,服务端文档组件向来以 Apache POI 为代表,作为一款由 Java 编写的开源 API 库,Apache POI 主要应用于对文档进行读、写,以及创建和维护。
但正如 POI 所定义的那样:作为“Poor Obfuscation Implementation”首字母的缩写,Apache POI 仅提供“简单的模糊实现”,其在创建复杂逻辑的大型文档时,经常会捉襟见肘。
如果想通过简单的代码逻辑,快速创建、加载、编辑、导入 /导出大型文档( Excel 、Word 、PDF ),并将其部署到云端时,又该如何实现?
而这些需求,恰恰是 GrapeCity Documents 可以满足的。
GrapeCity Documents 是什么?

GrapeCity Documents 是一款快速且高效的服务端文档组件包,可在 Windows 、Mac 、Linux 上完美运行,同时适用于 .NET 和 Java 平台,可在不依赖第三方组件的情况下,提供快速生成、加载、编辑和保存 Excel 、PDF 、Word 文档的功能。
GrapeCity Documents 由四种针对不同文档和开发框架的组件构成:
· 适用于所有 .NET 平台的 Excel 文档 API —— GcExcel (.NET )
· 适用于所有 Java 平台的 Excel 文档 API —— GcExcel ( Java )
· 适用于所有 .NET 平台的 PDF 文档 API —— GcPDF
· 适用于所有 .NET 平台的 Word 文档 API —— GcWord
下面,我们将以其中的 GcExcel 为例,详细对比它与 Apache POI 的功能及性能优劣。
功能对比:GcExcel VS Apache POI
-
公式数量
GcExcel 支持 452 种 Excel 公式。
Apache POI 中,支持的公式数量很少(虽然 Apache POI 网站罗列了 280 多种可评估的公式,但在 API 中仅显示为 157 种)。
-
是否支持导出 PDF
GcExcel 不但支持导出 PDF 格式,还可控制页面设置选项。
Apache POI 不支持导出 PDF 。
-
条件格式
GcExcel 支持多种条件格式,如自定义图标集、判断是否高于平均值( AboveAverage )、发生日期判断、Top 10 和重复项判断,且这些条件格式的设置规则与 VSTO 保持一致。
但在 Apache POI 中,使用高级 API 来增加条件格式判断会受限。因此,只能使用标记为内部用途的低级类来处理 Top10 、高于平均值( AboveAverage )等格式化选项。
-
图表类型
GcExcel 的图表界面与 VSTO 一致,支持约 53 种图表类型。
Apache POI 对图表的支持非常有限,仅支持 Line 、Bar 、Column 、Scatter 和 Radar 图表类型。
-
迷你图
GcExcel 完全支持添加和配置迷你图( Sparklines )。
Apache POI 目前不支持 Sparklines 。
-
剪切、复制、粘贴形状
GcExcel 支持剪切、复制、粘贴形状,Apache POI 不支持。
-
过滤器数据类型
GcExcel 广泛支持文本、数字、日期、颜色和图标等过滤器。
Apache POI 仅支持基本的 AutoFilter,需要使用低级类来实现应用过滤或创建任何其他高级过滤器。
-
排序
GcExcel 支持所有类型的行排序、列排序、自定义排序、颜色和图标排序。
Apache POI 没有内置的排序功能。但是,用户可以使用 shiftRows ()/ ShiftColumns ()并以编程方式对数据进行排序。
-
切片器
GcExcel 支持带有数据透视表的切片器,而 Apache POI 则不支持。
-
导出 CSV 格式
GcExcel 支持导出为 CSV 格式。
Apache POI 没有提供内置的导出 CSV 选项。但是,可以使用编程的方式创建相应的 CSV / HTML 文件。
-
渐变填充
GcExcel 支持渐变填充,而 Apache POI 不支持。
-
单元格中获取 /设置值
在对单个单元格执行获取 /设置值的情况下,GcExcel 比 Apache POI 表现的更好。
-
示例与帮助文档
使用 Apache POI,许多功能需要访问和了解底层 API 才能实现, 但 Apache POI 提供的示例和文档数量十分有限,对于开发人员来说学习成本较大。
而 GcExcel 作为独立于平台的 API 组件,具备高性能、低内存消耗的特点,并且与 Excel 对象模型严格兼容。GcExcel 更加易于使用且功能全面,通过其提供的在线演示示例和帮助文档,开发人员可以快速上手,迅速掌握产品使用技巧。
性能对比:GcExcel VS Apache POI
让我们通过一个 GcExcel Java 的基准测试项目对比其与 Apache POI 的性能优劣,该项目是一个 java gradle 项目,可以输出 GcExcel 、POI 和 Aspose.Cells 的性能结果,如下所示:
· 设置:获取和保存 100,000 * 30 单元格的 double / string / date 值,下图显示了 double 值的结果。
· GcExcel 用时不超过 0.2S ; Apache POI 则达到 18.7S 左右


· 设置:计算和保存 20,000 * 30 个单元格的公式,结果如下:
· GcExcel 用时不超过 1S ; Apache POI 则达到 10S 左右

· 打开并保存一个 20.5MB 的 Excel 文件,其中包含了许多数据、公式和单元格格式,结果如下:
· GcExcel 用时不超过 4.9S ; Apache POI 则达到 10S 左右
· GcExcel 内存消耗为 72.1MB ; Apache POI 为 3518.2MB

结论
从以上结果可以看出,GcExcel 是目前为止速度最快、内存消耗最少的服务端电子表格组件。
尽管 Apache POI 是免费的,但它的速度和内存消耗远远达不到企业级项目的标准,这就是为什么我只选择 100,000 * 30 个单元格的原因,因为即使在 1,000,000 * 30 个单元格的情况下,GcExcel Java 仍旧可以平稳运行。
除此之外,为了保证 Apache POI 成功运行,还必须将 JVM 最小堆大小配置为 4G,否则它将抛出 OutOfMemory 异常。 以下是 build.gradle 中的 JVM 配置:
applicationDefaultJvmArgs = ["-Xms4096m", "-Xmx8192m"]
大家可以从 GitHub 上下载这个测试项目:
https://github.com/GrapeCity/GcExcel-Java/tree/master/benchmark, 并使用以下命令行运行它:
- on mac: ./gradlew run –args=”double” //参数可以是 double, string, date, formula, bigfile
- on windows: gradlew run –args=”double” //参数可以是 double, string, date, formula, bigfile
请注意,第一次运行会非常慢,因为它需要下载 gradle 和所有相关软件包。
以上,就是 GrapeCity Documents 与 Apache POI 在功能和性能上的对比测试,从数据可见,无论是运行速度,还是内存消耗,GrapeCity Documents 都要比 Apache POI 表现的更为优秀。
如果您也有服务端处理 Excel 、Word 、PDF 等文档的需求,需要快速批量操作大型文档,可以前往 GrapeCity Documents 官网 ,下载试用。