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

Swa*_*ika 92 java excel jxl apache-poi

哪两个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)
Run Code Online (Sandbox Code Playgroud)

两者都用于.xls和.xlsx扩展.我使用的Java版本是:JDK1.6

rge*_*man 254

我使用过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不支持 文本格式,即文本字符串中的不同格式; 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清晰,简洁,非常有帮助 (8认同)
  • 使我迁移到POI的一个重要因素是使用steaming API的灵活性,当你想要读取具有大量数据的excel时,这是必须的.如果excel中的数据很大,则在打开excel时,您不希望将wole数据加载到内存中.使用流式传输,解析工作表后,excel /任何office文档的全部内容不会立即加载到内存中. (2认同)

小智 12

我用过POI.

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


小智 5

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

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