在进行测试之前,首先在网上下载jxl.jar文件,放到classpath路径下或者放到你的工程中(效果一样,其实就是要在classpath能够找到这个jar包)
好了,下面现在开始做例子
第一步:创建excel文件 CreateExcel.java
package com.lrb.jxl.test;
import java.io.File;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class CreateExcel {
public static void main(String[] args) {
try{
//创建并打开文件c:\\test.xls
WritableWorkbook book = Workbook.createWorkbook(new File("C:\\test.xls"));
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet("第一页", 0);
//在Label对象的构造子中指名单元格位置是第一行第一列(0,0)
//以及单元格内容“test”
Label l = new Label(0,0,"test");
//l.setString("this is name"); 设置此格内容
//将定义好的单元格添加到工作表中
sheet.addCell(l);
/**
* 生成一个保存数字的单元格
* 必须使用Number的完整包路径,否则有语法歧义
* 单元格位置是第二列,第一行,值为3.1415926
*/
Number number = new Number(1,0,3.1415926);
sheet.addCell(number);
book.write();
book.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
第二步:更新excel文件 UpdateExcel.java
package com.lrb.jxl.test;
import java.io.File;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WritableFont.FontName;
public class UpdateExcel {
public static void main(String[] args) {
try {
//excel获得文件
Workbook wb = Workbook.getWorkbook(new File("C:\\test.xls"));
//打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book = Workbook.createWorkbook(new File("c:\\test.xls"),wb);
//添加一个工作表
//WritableSheet sheet = book.createSheet("second sheet",1);
WritableSheet sheet = book.getSheet("second sheet"); //用于第二次读取使用
/**
* 单元格操作
*/
//合并单元格操作(合并第一列第一行到第一列第六行的所有单元格)。合并后的单元格不能再次进行合并,否则会触发异常
sheet.mergeCells(0, 0, 0, 5);
//设置第一行的高度为200
sheet.setRowView(0, 200);
//设置第一列的宽度为20
sheet.setColumnView(0, 30);
/**
* 字符串格式化操作
*/
//指定字串格式:字体为TIMES,字号16,加粗显示
WritableFont font = new WritableFont(WritableFont.TIMES,12,WritableFont.BOLD);
//WritableCellFormat 指定单元格的各种属性
WritableCellFormat format1 = new WritableCellFormat(font);
// 把水平对齐方式指定为居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
// 把垂直对齐方式指定为居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//Label类的构造子,指定了字串被赋予那种格式
sheet.addCell(new Label(0,0,"第二页测试数据",format1));
book.write();
book.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
第三步:读取excel打印 ReadExcel.java
package com.lrb.jxl.test;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import jxl.Cell;
import jxl.CellType;
import jxl.DateCell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class ReadExcel {
public static void main(String[] args) throws BiffException, IOException {
//打开文件
Workbook book = Workbook.getWorkbook(new File("C:\\test.xls"));
//获得第一个工作表对象
Sheet sheet = book.getSheet(0);
//如果知道工作表的名字,也可使用如下方法获得指定名称的工作表对象
Sheet sheet1 = book.getSheet("second sheet");
//获得第一列第一行的单元格
Cell cell = sheet.getCell(0, 0);
String result = cell.getContents();
//获得工作表名称
System.out.println("第一个工作表名称:"+sheet.getName());
//获得列数
System.out.println("列数:"+sheet.getColumns());
//获得行数
System.out.println("行数"+sheet.getRows());
System.out.println("根据下标取得第一列第一行数据:"+result);
/**
* 在用jxl解析excle的时候,如果excel中有小数,
* 如果小数点后的位数多的化,可能会用科学技术法来显示结果,
* 为了避免显示科学计数法,可以通过两个办法来解决
* 1:将excel的小数的cell格的格式改成字符串型。
* 2:用下面的程序处理。
*/
Cell cel = sheet.getCell(1,0);
String data = cel.getContents();
if(cel.getType() == CellType.DATE){
DateCell dc = (DateCell)cel;
data = new SimpleDateFormat("YYYY-MM-DD").format(dc.getDate());
}else if(cel.getType() == CellType.NUMBER || cel.getType() == CellType.NUMBER_FORMULA){
NumberCell nc = (NumberCell) cel;
data = ""+nc.getValue();
}
System.out.println("第二列第一行数据:"+data);
System.out.println("=====================================");
Cell cell1 = sheet1.getCell(0, 0);
String result1 = cell1.getContents();
//获得工作表名称
System.out.println("第一个工作表名称:"+sheet1.getName());
//获得列数
System.out.println("列数:"+sheet1.getColumns());
//获得行数
System.out.println("行数"+sheet1.getRows());
System.out.println("根据名称得到sheet数据第一列第一行:"+result1);
book.close();
}
}
第一个工作表名称:第一页
列数:2
行数1
根据下标取得第一列第一行数据:test
第二列第一行数据:3.1415926
=====================================
第一个工作表名称:second sheet
列数:1
行数6
根据名称得到sheet数据第一列第一行:第二页测试数据
相关内容全部在注释中写明,可根据需要进行自行修改。
题外话:jxl目前不支持2007及其以后的版本,如果需要可以使用POI。如果你是2007或以上版本,切记不可通过直接修改文件后缀名来使其支持文件的读写操作。