在Java中读取Excel工作表的最佳API是什么 - JXL或Apache POI

时间:2013-02-20 13:12:27

标签: java excel apache-poi jxl

两个API中哪一个更易于读取/写入/编辑Excel工作表? 这些API不支持CSV扩展吗?

使用JXL for file.xls和file.xlsx,我得到一个例外:

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

4 个答案:

答案 0 :(得分:250)

我使用了JXL(现在是“JExcel”)和Apache POI。起初我使用的是JXL,但现在我使用的是Apache POI。

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

  • 两者都是免费的
  • 细胞样式:对齐,背景(颜色和图案),边框 (类型和颜色),字体支持(字体名称,颜色,大小,粗体, 斜体,删除线,下划线)
  • 公式
  • 超链接
  • 合并的单元格区域
  • 行和列的大小
  • 数据格式:数字和日期
  • 单元格内的文字换行
  • 冻结窗格
  • 页眉/页脚支持
  • 读/写现有和新电子表格
  • 两者都试图将现有对象保留在尽可能完整读取的电子表格中。

然而,存在许多差异:

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

此外,POI不仅包含主“usermodel”API,还包含基于事件的API(如果您只想阅读电子表格内容)。

总之,由于更好的文档,更多功能,活动开发和Excel 2007+格式支持,我使用Apache POI。

答案 1 :(得分:12)

我使用了POI。

如果您使用它,请继续关注那些单元格格式器:创建一个并多次使用它而不是每次为单元格创建,这是一个巨大的内存消耗差异或大数据。

答案 2 :(得分:5)

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

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

答案 3 :(得分:1)

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