在 GrapeCity Documents出现之前,服务端文档组件向来以Apache POI为表明,做为一款由Java编写的开源API库,Apache POI 主要应用于对Microsoft Office文档进行读、写,以及建立和维护。java
但正如POI所定义的那样:做为“Poor Obfuscation Implementation”首字母的缩写,Apache POI仅提供“简单的模糊实现”,其在建立复杂逻辑的大型文档时,常常会捉襟见肘。git
若是想经过简单的代码逻辑,快速建立、加载、编辑、导入/导出大型文档(Excel、Word、PDF),并将其部署到云端时,又该如何实现?github
而这些需求,偏偏是GrapeCity Documents 能够知足的。编程
GrapeCity Documents 是一款快速且高效的服务端文档组件包,可在 Windows、Mac、Linux 上完美运行,同时适用于 .NET和 Java 平台,可在不依赖 Microsoft Office 和 Acrobat 组件的状况下,提供快速生成、加载、编辑和保存 Excel、PDF、Word文档的功能。windows
GrapeCity Documents 由四种针对不一样文档和开发框架的组件构成:app
· 适用于全部 .NET 平台的 Excel 文档 API —— GcExcel(.NET)框架
· 适用于全部 Java 平台的 Excel 文档 API —— GcExcel(Java)性能
· 适用于全部 .NET 平台的 PDF 文档 API —— GcPDF学习
· 适用于全部 .NET 平台的 Word 文档 API —— GcWord测试
下面,咱们将以其中的GcExcel 为例,详细对比它与 Apache POI 的功能及性能优劣。
1.公式数量
GcExcel支持452种Excel公式。
Apache POI中,支持的公式数量不多(虽然Apache POI网站罗列了280多种可评估的公式,但在API中仅显示为157种)。
2.是否支持导出PDF
GcExcel不但支持导出PDF格式,还可控制页面设置选项。
Apache POI不支持导出PDF。
3.条件格式
GcExcel支持多种条件格式,如自定义图标集、判断是否高于平均值(AboveAverage)、发生日期判断、Top 10和重复项判断,且这些条件格式的设置规则与VSTO保持一致。
但在Apache POI中,使用高级API来增长条件格式判断会受限。所以,只能使用标记为内部用途的低级类来处理Top十、高于平均值(AboveAverage)等格式化选项。
4.图表类型
GcExcel的图表界面与VSTO一致,支持约53种图表类型。
Apache POI对图表的支持很是有限,仅支持Line、Bar、Column、Scatter和Radar图表类型。
5.迷你图
GcExcel彻底支持添加和配置迷你图(Sparklines)。
Apache POI目前不支持Sparklines。
6.剪切、复制、粘贴形状
GcExcel支持剪切、复制、粘贴形状,Apache POI不支持。
7.过滤器数据类型
GcExcel普遍支持文本、数字、日期、颜色和图标等过滤器。
Apache POI仅支持基本的AutoFilter,须要使用低级类来实现应用过滤或建立任何其余高级过滤器。
8.排序
GcExcel支持全部类型的行排序、列排序、自定义排序、颜色和图标排序。
Apache POI没有内置的排序功能。可是,用户可使用shiftRows()/ ShiftColumns()并以编程方式对数据进行排序。
9.切片器
GcExcel支持带有数据透视表的切片器,而Apache POI则不支持。
10.导出CSV格式
GcExcel支持导出为CSV格式。
Apache POI没有提供内置的导出CSV选项。可是,可使用编程的方式建立相应的CSV / HTML文件。
11.渐变填充
GcExcel支持渐变填充,而Apache POI不支持。
12.单元格中获取/设置值
在对单个单元格执行获取/设置值的状况下,GcExcel比Apache POI表现的更好。
13.示例与帮助文档
使用Apache POI,许多功能须要访问和了解底层API才能实现, 但Apache POI提供的示例和文档数量十分有限,对于开发人员来讲学习成本较大。
而GcExcel做为独立于平台的API 组件,具有高性能、低内存消耗的特色,而且与Excel对象模型严格兼容。GcExcel更加易于使用且功能全面,经过其提供的在线演示示例和帮助文档,开发人员能够快速上手,迅速掌握产品使用技巧。
让咱们经过一个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, 并使用如下命令行运行它:
请注意,第一次运行会很是慢,由于它须要下载gradle和全部相关软件包。
以上,就是GrapeCity Documents 与Apache POI 在功能和性能上的对比测试,从数据可见,不管是运行速度,仍是内存消耗,GrapeCity Documents 都要比Apache POI表现的更为优秀。
若是您也有服务端处理 Excel、Word、PDF等文档的需求,须要快速批量操做大型文档,能够前往GrapeCity Documents 官网,下载试用。