在 GrapeCity Documents 出现以前,服务端文档组件向来以Apache POI为代表,作为一款由Java编写的开源API库,Apache POI 主要应用于对Microsoft Office文档进行读、写,以及创建和维护。
但正如POI所定义的那样:作为“Poor Obfuscation Implementation”首字母的缩写,Apache POI仅提供“简单的模糊实现”,其在创建复杂逻辑的大型文档时,经常会捉襟见肘。
如果想通过简单的代码逻辑,快速创建、加载、编辑、导入/导出大型文档(Excel、Word、PDF),并将其部署到云端时,又该如何实现?
而这些需求,恰恰是GrapeCity Documents 可以满足的。
GrapeCity Documents是什么?
GrapeCity Documents 是一款快速且高效的服务端文档组件包,可在 Windows、Mac、Linux 上完美运行,同时适用于 .NET和 Java 平台,可在不依赖 Microsoft Office 和 Acrobat 组件的情况下,提供快速生成、加载、编辑和保存 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 上下载这个测试项目, 并使用以下命令行运行它:
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官网,下载试用。
GcExcel | 下载试用
GrapeCity Documents for Excel (简称:GcExcel)是一款基于 Java 平台的服务端高性能表格组件,可与纯前端表格控件 SpreadJS 前后端兼容,无需依赖 Office、POI 或第三方应用软件,在前端展示电子表格数据,在服务端批量创建、加载、编辑、打印、导入/导出 Excel 文档,为您开发的应用程序提供在线文档的前后端数据同步、在线填报与服务端批量导出与打印,以及类 Excel 报表模板设计与服务端高性能处理等一整套类 Excel 全栈解决方案。
葡萄城热门产品


