在java-JXL或ApachePOI中阅读Excel工作表最好的API是什么

在java-JXL或ApachePOI中阅读Excel工作表最好的API是什么,java,excel,apache-poi,jxl,Java,Excel,Apache Poi,Jxl,两个API中哪一个更易于读取/写入/编辑excel工作表? 这些API不支持CSV扩展吗 对file.xls和file.xlsx使用JXL时,会出现如下异常: jxl.read.biff.biffeException:无法识别OLE流 在jxl.read.biff.CompoundFile.(CompoundFile.java:116) 位于jxl.read.biff.File。(File.java:127) 在jxl.Workbook.getWorkbook(Workbook.java:268

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

对file.xls和file.xlsx使用JXL时,会出现如下异常:

jxl.read.biff.biffeException:无法识别OLE流
在jxl.read.biff.CompoundFile.(CompoundFile.java:116)
位于jxl.read.biff.File。(File.java:127)
在jxl.Workbook.getWorkbook(Workbook.java:268)
位于core.ReadXLSheet.contentReading(ReadXLSheet.java:46)
位于core.ReadXLSheet.init(ReadXLSheet.java:22)
位于core.ReadXLSheet.main(ReadXLSheet.java:72)
用于.xls和.xlsx扩展名。 我使用的Java版本是:JDK1.6

我使用了POI


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

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

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

我使用了(现在是“Jetcel”)和。起初我使用JXL,但现在我使用ApachePOI

首先,以下是两个API具有相同终端功能的情况:

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

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


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

为了阅读Java中的“普通”CSV文件,这里提供了一个名为OpenCSV的库:

感谢您的详细解释。+1提供了清晰、简洁且非常有用的脏
getContents()
方法在JExcelAPI中节省了我很多时间。使用POI,您必须检查它的单元格类型,然后获取它的值(如果是数字单元格,则需要检查它是否是日期单元格)根据它的类型,最后用不同的方法将其转换为字符串值,这太不方便了。无法想象POI没有提供像JExcelAPI那样肮脏但方便的方法。如果POI是基于事件的读取,这是一件非常积极的事情。尤其是在移动设备(=Android)上,这在处理有限的堆大小和GC时有很大帮助。使用JXL读取简单的XLS通常会达到应用程序内存限制,导致应用程序崩溃。促使我迁移到POI的一个重要因素是灵活使用流式API,这是在您想读取包含大量数据的excel时必须使用的。您不会想要wol如果excel中的数据很大,则在打开excel时将数据加载到内存中。通过流式处理,解析工作表后,excel/任何office文档的全部内容都不会立即加载到内存中。Apache现在也有一个用于CSV的Commons产品。它工作得很好,并且有很好的品牌。关于:“有哪些API可以用Java读/写Microsoft Excel电子表格(JXL、Apache POI等)?使用它们的最佳方案是什么?”