Java读写Excel:Apache POI, JXL与OpenCSV

标签: java excel apache | 发表时间:2015-02-28 23:27 | 作者:
出处:http://www.iteye.com

前些日子把JXL替换为ApachePOI,原因很简单,JXL在2009年10月已经停止更新,并且不支持Excel 2007 OOXML (.xlsx)格式的文件。事实上把JXL与POI进行比较并不公平,因为JXL只能够操作OLE2格式的Excel(即.xls),而POI则是能够读写xls(x)、doc(x)、ppt(x)的一整套解决方案。

 

不同版本Excel的行列数限制: 

+-----------------+-----------+--------------+---------------------+
|                 | Max. Rows | Max. Columns | Max. Cols by letter |
+-----------------+-----------+--------------+---------------------+
| Excel 365*      | 1,048,576 | 16,384       | XFD                 |
| Excel 2013      | 1,048,576 | 16,384       | XFD                 |
| Excel 2010      | 1,048,576 | 16,384       | XFD                 |
| Excel 2007      | 1,048,576 | 16,384       | XFD                 |
| Excel 2003      | 65,536    | 256          | IV                  |
| Excel 2002 (XP) | 65,536    | 256          | IV                  |
| Excel 2000      | 65,536    | 256          | IV                  |
| Excel 97        | 65,536    | 256          | IV                  |
| Excel 95        | 16,384    | 256          | IV                  |
| Excel 5         | 16,384    | 256          | IV                  |
+-----------------+-----------+--------------+---------------------+

 *Excel 365 unverified.

 

JXL - JExcelApi

Maven Repo

官方网站

最后更新:Oct 24,2009

 

<dependency>
 <groupId>net.sourceforge.jexcelapi</groupId>
 <artifactId>jxl</artifactId>
 <version>2.6.12</version>
</dependency>

JXL是一个日本人写的简单类库。 作者主页POI和jxl.jar性能比较一贴中提到其性能较poi更高,内存消耗更少。当且仅当目标文档是行数接近但不超过65536的xls格式时成立。

 

类图:

public static void main(String[] args) {
  try {
   // create writable wookbook
   WritableWorkbook workbook 
    = Workbook.createWorkbook(new File("jxlOutput.xls"));
   
   // create writable sheet
   WritableSheet sheet = workbook.createSheet("First Sheet", 0);
   for(int i = 0; i < data.length; i++) {
    for(int j = 0; j < data[i].length; j++){
     
     // create a cell at position (i, j) and add to the sheet
     Label label = new Label(i, j, data[i][j]);
     sheet.addCell(label);
    }
   }
   workbook.write();
   workbook.close();
  } catch (IOException | WriteException e) {
   e.printStackTrace();
  }
 }

Apache POI

Maven Repo

官方网站

最后更新:Dec 17,2014

 

类图:

<dependency> 
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.10.1</version>
</dependency> 
 
 <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
     <version>3.9</version>
 </dependency>

Apache POI API的一些重点:

  • Apache POI包含 Excel 97(-2007)文件格式(.xls)的Java实现 – HSSF。(彩蛋:H指Horrible)
  • Apache POI包含 Excel 2007 OOXML文件格式(.xlsx)的Java实现 – XSSF。
  • Apache POI的HSSF和XSSF API提供了读写和修改Excel电子表格的功能。
  • Apache POI也提供了SXSSF API(流式XSSF),它是XSSF的扩展,用于写入非常大的excel文件。SXSSF API需求较小的内存,适用于在堆内存受限时处理较大excel文件的情况。
  • 可以选择两种模型:Event Model和User Model。Event Model需求较小的内存,流式读取并处理每个单元;User Model更具备面向对象的特征,方便操作。
  • Apache POI提供了对excel附加功能的完美支持,如公式、单元格样式、颜色、字体、数据验证、图像和超链接等。

SpreadSheet API 功能摘要:

 

以下是两个基于XSSF读写xlsx文件的例子:

读取xlsx文件

写入xlsx文件

 

OpenCSV: 

CSV文件以纯文本形式存储表格数据(数字和文本)。OpenCSV是一个用于读写CSV文件的简单Java类库。 Maven Repo

官方网站

最近更新:Jul 28,2011

<dependency>
 <groupId>net.sf.opencsv</groupId>
 <artifactId>opencsv</artifactId>
 <version>2.3</version>
</dependency>

OpenCSV将CSV文件中的每一行读取为一个String数组。相应地,写文件时通过csvWriter.writeNext(array)把String数组内容作为一行写入CSV文件

 

读写CSV文件的例子:

读取csv文件内容

将xlsx文件内容写入csv

 

References:

1. POI-HSSF and POI-XSSF - Java API To Access Microsoft Excel Format Files

2. Java Read/Write Excel File using Apache POI API

 

Original Link:  http://cwind001.github.io/blog/2015/02/27/apachepoi/

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java excel apache] 推荐:

java导出excel超出65536条处理

- - Java - 编程语言 - ITeye博客
poi包导出excel超出65536报错:. 解决办法1:XSS替换HSS. 支持office2007,可以超过65536行,当数据比较多的时候,会报内存溢出的错误,解决办法看:http://blog.csdn.net/wula0010/article/details/5329817,调整jvm的堆栈大小设置.

Apache Thrift - java开发详解

- - 编程语言 - ITeye博客
2、编写IDL文件 Hello.thrift. 4、编写实现类、实现Hello.Iface:. 5、编写服务端,发布(阻塞式IO + 多线程处理)服务.      * 阻塞式、多线程处理 .             //设置传输通道,普通通道  .             //使用高密度二进制协议  .

使用Java基于数据流直接抽取excel文本

- - 脚本爱好者
如下代码是直接基于数据流进行文本抽取,支持excel97-excel2003版本,之后的版本实际都是xml,抽取文本非常简单,因此在此处不再说明,代码仅供研究学习使用,禁止用于商业用途.

Java程序连接数据库查询再导出Excel中

- - Java - 编程语言 - ITeye博客
     * 到处Excel文件的Action.         // 调用导出方法.      * @param col 所要导出对象集合.         FileOutputStream out = new FileOutputStream("d://"+"导出excel数据"+System.currentTimeMillis() + ".xls");.

Apache Thrift入门2-Java代码实现例子

- - J2EE企业应用 顾问/咨询- H.E.'s Blog
  在上一篇文章中提到了Thrift的架构、传输协议( Ref),本篇文章将对Thrift的入门实例进行介绍. 分为如下5个部分: 运行环境、安装/配置、脚本文件、创建代码、运行程序. 二、安装/配置 (清单2).     1.下载thrift源文件.     2.编译thrift源文件.         1)解压 thrift-0.5.0.tar.gz.

文章: Apache Crunch:用于简化MapReduce编程的Java库

- - InfoQ cn
Apache Crunch(孵化器项目)是基于Google的 FlumeJava库编写的Java库,用于创建MapReduce流水线. 与其他用来创建MapReduce作业的高层工具(如Apache Hive、Apache Pig和Cascading等)类似,Crunch提供了用于实现如连接数据、执行聚合和排序记录等常见任务的模式库.

Apache FOP 将Java对象转换为pdf文件

- - 开源软件 - ITeye博客
最近因为项目需要将对象打印特定模式的PDF,经大佬建议,选择了使用FOP,较之iText,灵活性更强,对代码依赖更少. 下面简要说明一下如何使用及demo.     根据现有一个pdf模板,将值填入pdf中导出. 其中,值从Java一个List>获取,每个Map展示在一页pdf中,整个List生成为一个pdf文件.

PHP导出excel

- syeye - scofield PHP开发-SEO SEM
最近做一个项目,其中涉及到了数据导成excel的功能. 后来使用了 开源的 PHPExcel  http://phpexcel.codeplex.com/ 目前最新版是1.7.6. PHPExcel 可以生成 .xls 和 .xlsx (office2007). 比如设置 excel的title,keywords,description.

Excel 数据分析

- - ITeye博客
用Excel做数据分析——直方图. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

Excel高级使用技巧

- demonhunterl - 互联网的那点事
如果直接输入“1/5”,系统会将其变为“1月5日”,解决办法是:先输入“0”,然后输入空格,再输入分数“1/5”. (2) 序列“001”的输入. 如果直接输入“001”,系统会自动判断001为数据1,解决办法是:首先输入“’”(西文单引号),然后输入“001”. 如果要输入“4月5日”,直接输入“4/5”,再敲回车就行了.