在JXL或ApachePOI中阅读Excel表的API更好



两个API中哪一个读/写/编辑excel表更简单?这些API不支持CSV扩展吗?

对file.xls和file.xlsx使用JXL,我得到一个异常,如:

jxl.read.biff.BiffException: Unable to recognize OLE stream
    at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)
    at jxl.read.biff.File.<init>(File.java:127)
    at jxl.Workbook.getWorkbook(Workbook.java:268)
    at core.ReadXLSheet.contentReading(ReadXLSheet.java:46)
    at core.ReadXLSheet.init(ReadXLSheet.java:22)
    at core.ReadXLSheet.main(ReadXLSheet.java:72)

扩展名均为.xls和.xlsx。我使用的Java版本是:JDK1.6

我同时使用了JXL(现在是"JExcel")和Apache POI。起初我使用JXL,但现在我使用ApachePOI。

首先,两个API具有相同的最终功能:

  • 两者都是免费的
  • 单元格样式:对齐、背景(颜色和图案)、边框(类型和颜色)、字体支持(字体名称、颜色、大小、粗体、,斜体、三振、下划线)
  • 公式
  • 超链接
  • 合并的单元格区域
  • 行和列的大小
  • 数据格式:数字和日期
  • 单元格中的文本换行
  • 冻结窗格
  • 页眉/页脚支撑
  • 读取/写入现有和新的电子表格
  • 两者都试图尽可能保持他们读入的电子表格中的现有对象完好无损

然而,有许多不同之处:

  • 也许最显著的区别是JavaJXL不支持Excel2007+".xlsx"格式;它只支持旧的BIFF(二进制)".xls"格式。Apache POI通过一个通用的设计支持这两种功能
  • 此外,JXL API的Java部分最后一次更新是在2009年(我写这篇文章时是3年4个月前),尽管看起来有一个C#API。Apache POI得到积极维护
  • JXL不支持条件格式,ApachePOI支持,尽管这并不重要,因为您可以用自己的代码有条件地格式化单元格
  • JXL不支持richtext格式,即文本字符串中的不同格式;Apache POI确实支持它
  • JXL只支持某些文本旋转:水平/垂直、+/-45度和堆叠;Apache POI支持任何整数度数加上堆叠
  • JXL不支持绘制形状;Apache POI的确如此
  • JXL支持大多数页面设置,如横向/纵向、页边距、纸张大小和缩放。Apache POI支持所有这些以及重复行和列
  • JXL不支持拆分窗格;Apache POI的确如此
  • JXL不支持图表创建或操作;ApachePOI中还没有这种支持,但API正在慢慢形成
  • ApachePOI提供了比JXL更广泛的文档和示例

此外,如果您只想阅读电子表格内容,POI不仅包含主要的"用户模型"API,还包含基于事件的API。

总之,由于有更好的文档、更多的功能、主动开发和Excel2007+格式支持,我使用了ApachePOI。

我使用过POI。

如果你使用它,请注意那些单元格格式化程序:创建一个并多次使用它,而不是每次为单元格创建,这对大数据来说是一个巨大的内存消耗差异。

我不熟悉JXL,但我们使用POI。POI维护良好,可以处理二进制.xls格式和Office2007中引入的新的基于xml的格式。

CSV文件不是excel文件,它们是基于文本的文件,所以这些库不会读取它们。您需要自己解析出一个CSV文件。我不知道有任何CSV文件库,但我也没有看过。

为了读取Java中的"普通"CSV文件,有一个名为OpenCSV的库,可在此处获得:http://opencsv.sourceforge.net/

最新更新