95

2 个 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

4

4 回答 4

260

我使用了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 不支持拆分窗格;Apache POI 可以。
  • JXL 不支持图表创建或操作;Apache POI 中还没有这种支持,但是 API 正在慢慢开始形成。
  • Apache POI 具有比 JXL 更广泛的可用文档和示例集。

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

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

于 2013-02-20T18:12:07.553 回答
13

我用过POI。

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

于 2013-02-20T13:14:37.753 回答
5

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

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

于 2013-02-20T13:43:26.233 回答
1

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

于 2014-01-03T15:43:15.913 回答