jxl.jar包简介/java操作excel jxl.jar下载地址

2024-05-11 11:18

本文主要是介绍jxl.jar包简介/java操作excel jxl.jar下载地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分类: Java

下载地址:
http://www.andykhan.com/jexcelapi/ 当前的最高版本是2.6。

真实下载地址:

http://www.andykhan.com/jexcelapi/download.html


作者的网站上对它的特征有如下描述: 
● 支持Excel 95-2000的所有版本 
● 生成Excel 2000标准格式 
● 支持字体、数字、日期操作 
● 能够修饰单元格属性 
● 支持图像和图表 
应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 
搭建环境 
将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。 
基本操作 
一、创建文件 
拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下: 
代码(CreateXLS.java): 
//生成Excel的类 
import java.io.*; 
import jxl.*; 
import jxl.write.*; 
public class CreateXLS 

public static void main(String args[]) 

try 

//打开文件 
WritableWorkbook book= 
Workbook.createWorkbook(new File(“测试.xls”)); 
//生成名为“第一页”的工作表,参数0表示这是第一页 
WritableSheet sheet=book.createSheet(“第一页”,0); 
//在Label对象的构造子中指名单元格位置是第一列第一行(0,0) 
//以及单元格内容为test 
Label label=new Label(0,0,”test”); 
//将定义好的单元格添加到工作表中 
sheet.addCell(label); 
/*生成一个保存数字的单元格 
必须使用Number的完整包路径,否则有语法歧义 
单元格位置是第二列,第一行,值为789.123*/ 
jxl.write.Number number = new jxl.write.Number(1,0,789.123); 
sheet.addCell(number); 
//写入数据并关闭文件 
book.write(); 
book.close(); 
}catch(Exception e) 

System.out.println(e); 



编译执行后,会在当前位置产生一个Excel文件。 
三、读取文件 
以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下: 
//读取Excel的类 
import java.io.*; 
import jxl.*; 
public class ReadXLS 

public static void main(String args[]) 

try 

Workbook book= 
Workbook.getWorkbook(new File(“测试.xls”)); 
//获得第一个工作表对象 
Sheet sheet=book.getSheet(0); 
//得到第一列第一行的单元格 
Cell cell1=sheet.getCell(0,0); 
String result=cell1.getContents(); 
System.out.println(result); 
book.close(); 
}catch(Exception e) 

System.out.println(e); 



程序执行结果:test 
四、修改文件 
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表: 
//修改Excel的类,添加一个工作表 
import java.io.*; 
import jxl.*; 
import jxl.write.*; 
public class UpdateXLS 

public static void main(String args[]) 

try 

//Excel获得文件 
Workbook wb=Workbook.getWorkbook(new File(“测试.xls”)); 
//打开一个文件的副本,并且指定数据写回到原文件 
WritableWorkbook book= 
Workbook.createWorkbook(new File(“测试.xls”),wb); 
//添加一个工作表 
WritableSheet sheet=book.createSheet(“第二页”,1); 
sheet.addCell(new Label(0,0,”第二页的测试数据”)); 
book.write(); 
book.close(); 
}catch(Exception e) 

System.out.println(e); 



执行结果如图: 
高级操作 
一、 数据格式化 
在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。 
1、 字串格式化 
字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号: 

WritableFont font1= 
new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); 或//设置字体格式为excel支持的格式 WritableFont font3=new WritableFont(WritableFont.createFont("楷体_GB2312"),12,WritableFont.NO_BOLD );① WritableCellFormat format1=new WritableCellFormat(font1); ② Label label=new Label(0,0,”data 4 test”,format1) ③ 其中①指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。 ②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。 ③处使用了Label类的构造子,指定了字串被赋予那种格式。 在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:

 //把水平对齐方式指定为居中 

format1.setAlignment(jxl.format.Alignment.CENTRE); 

//把垂直对齐方式指定为居中 

format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);

//设置自动换行
 format1.setWrap(true);


 
二、单元格操作 
Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。 
1、 合并单元格 
WritableSheet.mergeCells(int m,int n,int p,int q); 
作用是从(m,n)到(p,q)的单元格全部合并,比如: 
WritableSheet sheet=book.createSheet(“第一页”,0); 
//合并第一列第一行到第六列第一行的所有单元格 
sheet.mergeCells(0,0,5,0); 
合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。 
2、 行高和列宽 
WritableSheet.setRowView(int i,int height); 
作用是指定第i+1行的高度,比如: 
//将第一行的高度设为200 
sheet.setRowView(0,200); 
WritableSheet.setColumnView(int i,int width); 
作用是指定第i+1列的宽度,比如: 
//将第一列的宽度设为30 
sheet.setColumnView(0,30); 
五、操作图片
public static void write()throws Exception{
        WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls"));
        WritableSheet ws=wwb.createSheet("Test Sheet 1",0);
        File file=new File("C:\\jbproject\\PVS\\WebRoot\\weekhit\\1109496996281.png");
        WritableImage image=new WritableImage(1, 4, 6, 18,file);
        ws.addImage(image);
        wwb.write();
        wwb.close();
    }
很简单和插入单元格的方式一样,不过就是参数多了些,WritableImage这个类继承了Draw,上面只是他构造方法的一种,最后一个参数不用了说了,前面四个参数的类型都是double,依次是 x, y, width, height,注意,这里的宽和高可不是图片的宽和高,而是图片所要占的单位格的个数,因为继承的Draw所以他的类型必须是double,具体里面怎么实现的我还没细看:)因为着急赶活,先完成功能,其他的以后有时间慢慢研究。以后会继续写出在使用中的心得给大家。
   读:
读的时候是这样的一个思路,先用一个输入流(InputStream)得到Excel文件,然后用jxl中的Workbook得到工作薄,用Sheet从工作薄中得到工作表,用Cell得到工作表中得某个单元格.
InputStream->Workbook->Sheet->Cell,就得到了excel文件中的单元格
代码:
String path="c:\\excel.xls";//Excel文件URL
InputStream is = new FileInputStream(path);//写入到FileInputStream
jxl.Workbook wb = Workbook.getWorkbook(is); //得到工作薄 
jxl.Sheet st = wb.getSheet(0);//得到工作薄中的第一个工作表
Cell cell=st.getCell(0,0);//得到工作表的第一个单元格,即A1
String content=cell.getContents();//getContents()将Cell中的字符转为字符串
wb.close();//关闭工作薄
is.close();//关闭输入流

我们可以通过Sheet的getCell(x,y)方法得到任意一个单元格,x,y和excel中的坐标对应.
例如A1对应(0,0),A2对应(0,1),D3对应(3,2).Excel中坐标从A,1开始,jxl中全部是从0开始.
还可以通过Sheet的getRows(),getColumns()方法得到行数列数,并用于循环控制,输出一个sheet中的所有内容.
写:
往Excel中写入内容主要是用jxl.write包中的类.
思路是这样的:
OutputStream<-WritableWorkbook<-WritableSheet<-Label
这里面Label代表的是写入Sheet的Cell位置及内容.
代码:
OutputStream os=new FileOutputStream("c:\\test.xls");//输出的Excel文件URL
WritableWorkbook wwb = Workbook.createWorkbook(os);//创建可写工作薄
WritableSheet ws = wwb.createSheet("sheet1", 0);//创建可写工作表
Label labelCF=new Label(0, 0, "hello");//创建写入位置和内容
ws.addCell(labelCF);//将Label写入sheet中
Label的构造函数Label(int x, int y,String aString)xy意同读的时候的xy,aString是写入的内容.
WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//设置写入字体
WritableCellFormat wcfF = new WritableCellFormat(wf);//设置CellFormat
Label labelCF=new Label(0, 0, "hello");//创建写入位置,内容和格式
Label的另一构造函数Label(int c, int r, String cont, CellFormat st)可以对写入内容进行格式化,设置字体及其它的属性.
现在可以写了
wwb.write();
写完后关闭
wwb.close();
输出流也关闭吧
os.close;
OK,只要把读和写结合起来,就可以在N个Excel中读取数据写入你希望的Excel新表中,还是比较方便的.

下面是程序一例:

程序代码:sql = "select * from tablename";
    rs = stmt.executeQuery(sql);

//新建Excel文件
String filePath=request.getRealPath("aaa.xls");
File myFilePath=new File(filePath);
if(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=new FileWriter(myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
resultFile.close();

        //用JXL向新建的文件中添加内容
    OutputStream outf = new FileOutputStream(filePath);
        jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf);
        jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0);

int i=0;
        int j=0;

for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
    ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1)));
}

while(rs.next()){
    out.println(rs.getMetaData().getColumnCount());

for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,j+i+1,rs.getString(k+1)));
    }  

 i++;
}
wwb.write();
    wwb.close();
}catch(Exception e){e.printStackTrace();}
finally{

rs.close();
conn.close();
}

response.sendRedirect("aaa.xls"); 



Download page  ( 下载页面引用 )

JExcelApi v2.6.2 (1695kbytes) 

JExcelApi v2.6.1 (1639kbytes) 

JExcelApi v2.6 (1603kbytes) 

JExcelApi v2.5.9 (1575kbytes) 

JExcelApi v2.5.8 (1672kbytes) 

JExcelApi v2.5.7 (1717kbytes) 

JExcelApi v2.5.6 (1706kbytes) 

JExcelApi v2.5.5 (1625kbytes) 

JExcelApi v2.5.4 (1596kbytes) 

JExcelApi v2.5.3 (1584kbytes) 

JExcelApi v2.5.2 (1580kbytes) 

JExcelApi v2.5.1 (1410kbytes) 

JExcelApi v2.5 (1406kbytes) 

JExcelApi v2.4.5 (1349kbytes) 

JExcelApi v2.4.4 (1345kbytes) 

JExcelApi v2.4.3 (1420kbytes) 

JExcelApi v2.4.2 (1320kbytes) 

JExcelApi v2.4.1 (1302kbytes) 

JExcelApi v2.4 (1290kbytes) 

JExcelApi v2.3.14 (835kbytes) 

JExcelApi v2.3.13 (829kbytes) 

JExcelApi v2.3.12 (820kbytes) 

JExcelApi v2.3.11 (815kbytes) 

JExcelApi v2.3.10 (843kbytes) 

JExcelApi v2.3.9 (821kbytes) 

JExcelApi v2.3.8 (802kbytes) 

JExcelApi v2.3.7 (775kbytes) 

JExcelApi v2.3.6 (769kbytes) 

JExcelApi v2.3.5 (804kbytes) 

这篇关于jxl.jar包简介/java操作excel jxl.jar下载地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979376

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S