一.简介

jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的, 并不 依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。 另外需要说明的是,这套API对图形和图表的支持很有限,而且 仅仅识别PNG格式。

二.简单的实现代码

Maven 依赖

<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
package com.my.utils;

import java.io.File;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook; public class UseJxlCreateExcel { public static void main(String[] args) {
// TODO Auto-generated method stub
try {
WritableWorkbook book = Workbook.createWorkbook(new File("D:\\java\\test\\jxlTest.xls"));
WritableSheet sheet = book.createSheet(" 第一页 ", 0);
Label label1 = new Label(0, 0, "姓名");
Label label2 = new Label(1, 0, "年龄");
sheet.addCell(label1);
sheet.addCell(label2);
book.write();
book.close(); Workbook workbook = Workbook.getWorkbook(new File("D:\\java\\test\\jxlTest.xls"));
Sheet worksheet = workbook.getSheet(0);
Cell cell1 = worksheet.getCell(0, 0);
String result = cell1.getContents();
System.out.println(result);
workbook.close(); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

详见:http://www.cnblogs.com/raymond19840709/archive/2008/06/26/1230289.html

三.poi和 jxl

目前我所负责的系统中有POI和JXL两种方式的导出数据实现。
项目初期数据量不大一般使用JXL的方式,可以满足需求,后来在进行一些盘点,
等月度出入库查询报表统计的时候出现了超过最大sheet行的错误,另外堆内存也被占满了。
所以后面就紧急将部分重要功能,要导的数据量大的几个模块改造成POI的方式了。
但是仍然跑的很慢,没有了解POI的另外一种实现方式,后来对POI的工具类,以及POI的导出实现做了部分修正,顺利完成升级。

我的初步了解: 
JXL:支持比较低版本的excel,比如Excel 95 ,97 ,2000,2003 
由于Excel版本比较低,导致最大行有限制,无法导出65535以上量级的数据 
对于内存,和时间的花费也比POI基于内存+磁盘的方式高。

网友技术说明 
1. 读取Excel公式(可以读取Excel 97以后的公式) 
2. 生成Excel数据表(格式为Excel 97) 
3. 支持字体、数字、日期的格式化 
4. 支持单元格的阴影操作,以及颜色操作 
5. 修改已经存在的数据表 
6. 是最基础的excel api 
7. 小文件读取效率比较高 
8. 跨平台 
POI技术说明

  1. 能保持Excel里原有的宏(但不能用它写新的宏)。
  2. 不支持跨平台(主要就是Java语言)
  3. 在一些业务场景中代码相对复杂,但是API丰富,支持多种模式的读写。
  4. 支持比较新版本的excel.
  5. 读写的时候比较占内存。
  6. 读写的时候比较占内存。
  7. 支持大数量大文件的读写操作。但是需要熟悉API。

总体来说,对于简单的单表excel导入导出的需求,建议使用JXL。数据量稍微小点,占用内存少,速度快。 
对于报表类的,涉及月份数据量,多表数据聚合在一起建议使用POI。

从优缺点上来说

一、jxl

优点:

Jxl对中文支持非常好,操作简单,方法看名知意。
Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写
支持Excel 95-2000的所有版本(网上说目前可以支持Excel2007了,还没有尝试过)
生成Excel 2000标准格式
支持字体、数字、日期操作
能够修饰单元格属性
支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

缺点:效率低,图片支持不完善,对格式的支持不如POI强大

二、POI

优点:

效率高(数据来源:http://blog.csdn.net/jarvis_java/article/details/4924099)
支持公式,宏,一些企业应用上会非常实用
能够修饰单元格属性
支持字体、数字、日期操作

缺点:不成熟,代码不能跨平台,貌似不少同行在使用工程中还碰到让人郁闷的BUG(最近的项目中也是遇到了一些bug,不过目前没有查出来是代码的问题还是POI的问题,总之问题很诡异,数据替代参数总有失败的。关于不能跨平台这一说,我也没有试验过,不过Java不是跨平台吗?POI是JAVA的一个组件,怎么就不能跨平台了呢,总之这些问题还需要在以后的项目中多多实践,才能比较出区别之处。)

2018-06-08 16:30

6.JXL操作Excel的更多相关文章

  1. Java文件操作系列[2]——使用JXL操作Excel文件

    由于java流无法实现对Excel文件的读写操作,因此在项目中经常利用第三方开源的组件来实现.支持Excel文件操作的第三方开源组件主要有Apache的POI和开源社区的JXL. 总体来说,二者的区别 ...

  2. JXL操作Excel

    jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文 ...

  3. java利用jxl操作Excel

    /** * 把从数据库查询到的数据,写入电子表格 * * @throws Exception */ public void createXls() throws Exception { Dao dao ...

  4. 使用java程序jxl操作Excel表格

    在实际开发中企业办公系统都会涉及到一个打印报表的功能,也许你的需求就是把web前端展示的员工信息以Excel表格形式打印出来 ,那么具体怎么操作下面我来实现一下 首先我们使用的是 java的jxl技术 ...

  5. 【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .

    package com.email.jav; import java.io.File;import java.io.IOException;import java.net.URL; import jx ...

  6. Jxl操作excel的demo

    网上很多例子,都是用Jxl读或者写excel,本文实现的功能就是将数据源in.xls的第几行第几列数据写入到out.xls的第几行第几列,不覆盖out.xls其他原有的数据. 需要导入的包:jxl.j ...

  7. jxl操作excel单个单元格换行和获取换行

    excel中同表格换行: a+"\n"+b 1.读取 String str = sheet.getCell(c, r).getContents(); String[] split ...

  8. jxl操作excel写入数据不覆盖原有数据示例

    public void readTO() {        Workbook wb = null;        WritableWorkbook wwb = null;        try {   ...

  9. java对集合的操作,jxl操作excel

    http://www.cnblogs.com/epeter/p/5648026.html http://blog.sina.com.cn/s/blog_6145ed810100vbsj.html

随机推荐

  1. java数据结构之二叉树的定义和递归实现

    定义最多有两棵子树的有序树,称为二叉树.二叉树是一种特殊的树.递归定义:二叉树是n(n>=0)个有限结点构成的集合.N=0称为空二叉树:n>0的二叉树由一个根结点和两互不相交的,分别称为左 ...

  2. 使用subgit进行svn迁移至git(branch,tags)

    前言: 最近公司需要将整体项目从svn迁移至gitlab上,经过几天的研究,现记录一下流程 整体思路是进行一次导入: 先通过subgit将svn整个import至本地,在与git上的项目进行合并. 1 ...

  3. 安装Oracle需要调整的linux内核参数

    在安装Oracle的时候需要调整linux的内核参数,但是各参数代表什么含义呢,下面做详细解析. Linux安装文档中给出的最小值: fs.aio-max-nr = 1048576 fs.file-m ...

  4. 把AspDotNetCoreMvc程序运行在Docker上-part5:使用docker-compose

    在上一part<把AspDotNetCoreMvc程序运行在Docker上-part4:实现负载均衡>中,我们通过几个比较复杂的步骤在docker平台上实现了对网站程序的负载均衡,配置步骤 ...

  5. spring-boot前端参数单位转换

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import ja ...

  6. 另一个SqlParameterCollection中已包含SqlParameter(转)

    一般情况下,我们定义的一个SqlParameter参数数组,如: SqlParameter[] parms =             {                new SqlParamete ...

  7. Oracle - 为子查询提供动态结果集

    曾经遇到过这样一个需求:要求为method传入String,内容如"用户ID0,用户ID1,用户ID2...",然后根据这些ID返回一个结果集作为数据表供别人查询. SELECT ...

  8. iOS 交互h5 - WKWebView

    众所周知,UIWebView存在内存问题,也就是当加载一个UIWebView时,内存会一直上升趋势无法得到释放.这样在使用UIWebView进行h5交互开发时会有很大的问题. 因而苹果增加了一个新的类 ...

  9. 线程7--GCD的基本使用

    子线程执行延时操作,执行完成后返回主线程更新界面 dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DE ...

  10. 【原】Spring整合Shiro基础搭建[3]

    1.前言 上个Shiro Demo基础搭建是基于官方的快速入门版本,没有集成其他框架,只是简单的通过Main方法来执行Shiro工作流程,并测试一下比较核心的函数:但在企业开发中一般都会集成Sprin ...