JXL包提供了JAVA环境下操作EXCEL文件的方法,可对EXCEL文件进行读写操作。总体而言这个包的使用非常简单,因工作需要对它进行了简单的应用,现写一下个人总结。
JXL包似乎对某些版本的EXCEL文件不太兼容,网站上说它支持EXCEL95-2000。不知道是不是这个原因,在读取EXCEL XP文件时(文件中使用了“数据有效性”等格式),会发出一些警告信息,虽然不影响使用,但终究不太好看。所以下面这个例子是从一个EXCEL文件中读取数据,并将数据写入另一文件中,清除掉文件中使用的所有格式。在清除掉文件中使用的格式之后,再读取这个文件就一切正常了。
import jxl.*;
import jxl.write.*;i
mport java.io.*;
public class CleanExcel {
public static void clean(String inFile, String outFile){
//首先需要声明输入输出流与Workbook,Workbook对应Excel文件
InputStream is = null;
Workbook inWb = null;
OutputStream os = null;
WritableWorkbook outWb = null;
try{
//实例化输入输出流与
Workbook is = new FileInputStream(inFile);
//Workbook无法通过new关键字进行实例化,必须调用Workbook.getWorkbook(File)静态方法
inWb = Workbook.getWorkbook(is);
os = new FileOutputStream(outFile);
outWb = Workbook.createWorkbook(os);
//下面这一句是选择原文件的工作表,Sheet对应的是Excel中的Sheet
Sheet inSheet = inWb.getSheet("Sheet1");
//WritableSheet为要创建的文件中的工作表
WritableSheet outSheet = outWb.createSheet("Sheet1", 0);
//设置循环标志
boolean flag = true;
//循环条件
int i = 0;
while(flag){
//Cell对应一个单元格,getCell方法第一个参数对应列,第二个参数对应行。
//注意:行和列的开始坐标均为0,与JAVA中的数组一样
Cell tmp = inSheet.getCell(0, i);
//取得每行第一列单元格中的数据。不管单元格中的数据在EXCEL中为何种类型,读取之后都将成为String类型
String c = tmp.getContents().trim();
//为处理方面,EXCEL文件中最后一行的第一个单元格设置了一个break标志,读到这一行时将退出循环
if(c.equals("break")){
flag = false;
break;
}
//我处理的EXCEL表格为8列
for(int j = 0; j < 8; j++){
//取得源单元格
Cell inCell = inSheet.getCell(j, i);
//获取数据
String content = inCell.getContents().trim();
//创建新单元格,并用数据填充
Label labelCF=new Label(j, i, content);
//将新单元格加入到新工作表中
outSheet.addCell(labelCF);
}
i++;
}
//写入文件
outWb.write();
//关闭流
outWb.close();
os.close();
}catch(Exception e){
e.printStackTrace();
}
}
//测试
public static void main(String[] args){
try {
String in = "old.xls";
String out = "new.xls";
CleanExcel.clean(in, out);
} catch (Exception e) {
e.printStackTrace();
}
}
}