在java中读取Excel表单的更好的API是什么 – JXL或Apache POI

哪两个API更容易读取/写入/编辑excel表单? 这些API是否不支持CSV扩展?

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

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,但现在我使用Apache POI。

首先,这里是两个API具有相同的最终function的东西:

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

但是,有很多不同之处:

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

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

总之,由于更好的文档,更多的function,积极的开发和Excel 2007+格式支持,我使用Apache POI。

我曾经使用POI。

如果使用它,请继续关注这些单元格格式化程序:创build一个并使用它几次而不是每次创build单元格,这是一个巨大的内存消耗差异或大数据。

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

CSV文件不是excel文件,它们是基于文本的文件,所以这些库不会读取它们。 你将需要自己parsing一个CSV文件。 我不知道任何CSV文件库,但我还没有看。

为了阅读Java中的“简单”CSV文件,有一个名为OpenCSV的库,可以在这里find: http ://opencsv.sourceforge.net/