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读取信息。
public static List<Map<String, String>> readExcelFile(String filePath,int sheetNum){
List<Map<String, String>> ls = new ArrayList<Map<String,String>>();
Workbook book=null;
try{
//读Excel文件
book=Workbook.getWorkbook(new File(filePath));
//获得工作表个数
Sheet sheet=book.getSheet(sheetNum);
for (int i = 0; i < sheet.getRows(); i++) {
//获得行
Cell[] row = sheet.getRow(i);
Map<String, String> rowMap=new HashMap<String, String>();
for (int j = 0; j < row.length; j++) {
//获得单元格内容
String content=row[j].getContents();
if(StringUtils.isNotBlank(content)){
//因为从0开始,所以要+1
rowMap.put(String.valueOf(j+1),content);
}
}
if(!rowMap.isEmpty()){
ls.add(rowMap);
}
}
}catch (BiffException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally{
if(book!=null){
book.close();
}
}
return ls;
}
Cell提供了一个getType方法能够返回单元格的类型信息,同时JXL
提供了一个CellType类用来预设Excel中的类型信息,而且JXL
提供了一些Cell类的子类用来分别用来表示各种类型的单元格,如LabelCell,NumberCell,DateCell分别表示字符、数值、日期类型的单元格。所以我们可以这样写:
if (c2.getType() == CellType.NUMBER)
{
NumberCell nc = (NumberCell) c2;
numberb2 = nc.getValue();
}
如果你是要读取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)