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)