Java操作Excel之理解JXL--读写Excel

==初级=================================================================
JXL(Java Excel API)是一个用来动态读写Excel文件的开源框架,利用它可以在任何支持Java的操作系统上动态读写Excel文件。JXL的主页是:http://www.andykhan.com/jexcelapi/,可以在这里下载到它的最新的版本。
你可以分别通过如下命令
java -jar jxl.jar -xml test.xls
java -jar jxl.jar -cvs test.xls
以xml和cvs格式查看test.xls,这是因为JXL作者实现了一个用来演示的jxl.demo.Demo的类。

当然我们使用JXL主要是用它来动态读写Excel文件。现在就来看看JXL在对Excel的读和写上都提供了那些支持。
先来看看Excel文件中都有写上面对象
1 文件对象 2工作簿对象 3 单元格对象。
相应的在JXL中就有Workbook,Sheet ,Cell 。通过这三个对象我们就可以实现Excel文件的读取工作。
我们先想想一下读取步骤,不管是什么样的Excel操作框架必定都要经历
1选取Excel文件,2选择工作簿,3选择Cell,4读取信息。
那么现在就可以看看JXL中这四步骤如何体现:
//通过Workbook的静态方法getWorkbook选取Excel文件
Workbook workbook = Workbook.getWorkbook(new File("myfile.xls"));

//通过Workbook的getSheet方法选择第一个工作簿(从0开始)
Sheet sheet = workbook.getSheet(0);

//通过Sheet方法的getCell方法选择位置为C2的单元格(两个参数都从0开始)
Cell c2 = sheet.getCell(2,1);

//通过Cell的getContents方法把单元格中的信息以字符的形式读取出来
String stringc2 = c2.getContents();

可以看到正是刚才所说的四个步骤。

我们都知道Excel单元格是有格式的,那么这些信息如何取得。
Cell提供了一个getType方法能够返回单元格的类型信息,同时JXL提供了一个CellType类用来预设Excel中的类型信息,而且JXL提供了一些Cell类的子类用来分别用来表示各种类型的单元格,如LabelCell,NumberCell,DateCell分别表示字符、数值、日期类型的单元格。所以我们可以这样写:
if (c2.getType() == CellType.NUMBER)
{
  NumberCell nc = (NumberCell) c2;
  numberb2 = nc.getValue();
}

最后不要忘记关闭workbook以释放资源:
workbook.close();
现在总结一下:三个对象,四个步骤,注意格式。就可以轻松的从Excel文件中读取数据。



==图片====================================================================
如果你是要读取Excel中的图片,那么可以用Sheet的getDrawing(int i)方法返回一个Image对象,通过Image对象的
getImageData()或者getImageFile()即可访问到你需要的图片。
如过你是要把图片写入到Excel中,那么可以用WritableSheet的addImage(WritableImage image)
方法写入,其中WritableImage可以用构造函数直接构造。
(WritableImage(double x, double y, double width, double height, java.io.File image)



=Jxl使用总结=======================================================================
Jxl使用总结

Jxl是一个开源的Java Excel API项目,通过Jxl,Java可以很方便的操作微软的Excel文档。除了Jxl之外,还有Apache的一个POI项目,也可以操作Excel,两者相比之下:Jxl使用方便,但功能相对POI比较弱。POI使用复杂,上手慢,除了这个没啥说的了。

Jxl目前最新2.6.10,下载地址是:
http://nchc.dl.sourceforge.net/s ... excelapi_2_6_10.zip
http://www.andykhan.com/jexcelapi/download.html
http://www.andykhan.com/jexcelapi/tutorial.html
http://www.andykhan.com/jexcelapi/
http://www.andykhan.com/



API总结

1、创建或读取一个工作薄 Workbook

创建一个工作薄,就是整个Excel文档,
         WritableWorkbook wwb = Workbook.createWorkbook(os);其中os为一个文件输出流。当然还有很多其他的入参,比如File等。

Workbook不但能用来创建工作薄,也可以读取现有的工作薄,比如:
         Workbook.getWorkbook(java.io.File file);Workbook是一个很重要工具类,里面方法基本上都是static的,使用方便。

2、创建工作表 Sheet

创建工作表的方式是通过上面创建的WritableWorkbook对象来操作。
创建一个工作表:
         createSheet(java.lang.String name, int index),两个参数分别是工作表名字和插入位置,这个位置从0开始,比如:
         WritableSheet sheet = wwb.createSheet("演员表", 0);
3、创建标签 Label

实际上标签这里的意思就是工作表的单元格,这个单元格多种,分别对应不同的类,比如jxl.write.Boolean、jxl.write.Boolean等。
         Label label = new Label(col, row, title); 三个参数分别表示col+1列,row+1行,标题内容是title。

将标签加入到工作表中
         sheet.addCell(label);
4、填充数据

数据填充这块稍微复杂点,涉及到数据单元格的格式问题。

a)、填充数字
        jxl.write.Number numb = new jxl.write.Number(1, 1, 250);
        sheet.addCell(numb);
b)、填充格式化的数字
        jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
        jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf);
        jxl.write.Number n = new jxl.write.Number(2, 1, 2.451, wcf);
        sheet.addCell(n);
c)、填充日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String newdate = sdf.format(new Date());
        label = new Label(2, 2, newdate);
        sheet.addCell(label);
d)、填充文本
        label = new Label(3, 3, "周星驰");
        sheet.addCell(label);
e)、填充boolean值
        jxl.write.Boolean bool = new jxl.write.Boolean(4, 1, true);
        sheet.addCell(bool);
5、合并单元格

通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的。
表示将从第x+1列,y+1行到m+1列,n+1行合并 (四个点定义了两个坐标,左上角和右下角)
结果是合并了m-x+1行,n-y+1列,两者乘积就是合并的单元格数量。

        sheet.mergeCells(0, 6, 3, 8);
        label = new Label(0, 6, "合并了12个单元格");
        sheet.addCell(label);
6、添加单元格的式样

主要是改变单元格背景、字体、颜色等等。
        WritableCellFormat wc = new WritableCellFormat();
        // 设置居中
        wc.setAlignment(Alignment.CENTRE);
        // 设置边框线
        wc.setBorder(Border.ALL, BorderLineStyle.THIN);
        // 设置单元格的背景颜色
        wc.setBackground(jxl.format.Colour.RED);
        label = new Label(1, 5, "字体", wc);
        sheet.addCell(label);
7、设置单元格字体

        // 设置字体
        jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("楷书"), 20);
        WritableCellFormat font = new WritableCellFormat(wfont);
        label = new Label(2, 6, "楷书", font);
        sheet.addCell(label);
8、将工作写成文件

        // 写入数据
        wwb.write();
        // 关闭文件
        wwb.close();  
9、行列的批量操作

        //获取所有的工作表
        jxl.write.WritableSheet[] sheetList = wwb.getSheets();
        //获取第1列所有的单元格
        jxl.Cell[] cellc = sheet.getColumn(0);
        //获取第1行所有的单元格
        jxl.Cell[] cellr = sheet.getRow(0);
        //获取第1行第1列的单元格
        Cell c = sheet.getCell(0, 0);
10、获取单元格的值

        //获取单元格的值,不管什么单元格,返回都是字符串
        String value = c.getContents();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值