目前微软Office套件中的Excel仍然是电子表格数据处理的"王者",几乎所有玩过电脑的人都知道Excel之强大.当前的开发语言基本上都支持对Excel的操作,比如读取Excel中的数据、新增Excel电子表格,更新 Excel表格中的数据等操作,这些基本功能都是可以再程序中动态来控制的。
JExcel是Java对Excel操作封装的一个开源框架,通过它可以很简单的就能实现对Excel增、删、改、查等功能,而且使用JExcelAPI 在非操作系统中同样可以对Excel进行处理,加上JExcelAPI是使用 Java语言开发的,所以我们在WEB应用中同样可以通过Servlet或Jsp来调用JExcel的API对Excel数据表继续访问和相关操作。
JExcelAPI的最新版本:jexcelapi_2_6_10.zip
下载地址:http://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.10/jexcelapi_2_6_10.zip
主要功能:
package com.crazyidea.operate; import java.io.File; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; /** * JExcelAPI小试牛刀 * @author Alan * 时间:2009年8月22日 */ public class JExcelOperate { /** * 通过exl读取Excel中的数据 * @param eFilePath 文件路径(相对路径或绝对路径) */ public static void readExcel(String eFilePath){ //判断文件路是否为空 if (eFilePath!=null && !eFilePath.equals("")) { //判断文件是否存在 File eFile=new File(eFilePath); if (eFile.exists()) { Workbook wb=null; try { //Workbook的构造器是受保护的,所以我们只能通过它的工厂方法 //来创建一个Workbook对象 wb=Workbook.getWorkbook(eFile); if (wb!=null) { //可以通过Workbook中的两个方法来获取Excel中的某一指定的工作, //一个是通过索引(从0开始),另一个是通过工作表的名称来获取 //Sheet sheet=wb.getSheet(0); Sheet sheet=wb.getSheet("newSheet"); if (sheet!=null) { //逐行逐列的读取Excel中的数据 for(int i=0;i<sheet.getRows();i++){ for(int j=0;j<sheet.getColumns();j++){ System.out.print(sheet.getCell(j, i).getContents()); } System.out.println(); } } } } catch (Exception e) { e.printStackTrace(); } finally{ if (wb!=null) { wb.close(); } } } } } /** * 创建Excel文件,并写入数据 * @param efilePath 将要创建的Excel文件完整路径 */ public static void writeExcel(String efilePath){ //文件路径合法性验证 if (efilePath!=null && !efilePath.equals("") && efilePath.toUpperCase().endsWith(".XLS")) { WritableWorkbook wwb=null; try { //创建工作薄,注:该对象为Workbook的子类 wwb=Workbook.createWorkbook(new File(efilePath)); //创建工作表 WritableSheet ws=wwb.createSheet("newSheet", 0); //向工作表中添加单元格 //Label构造:一参:列 二参:行 三参:单元格内容 Label lblUid=new Label(0,0,"编号"); Label lblUname=new Label(1,0,"用户名"); Label lblUpass=new Label(2,0,"密码"); ws.addCell(lblUid); ws.addCell(lblUname); ws.addCell(lblUpass); Label lblUid1=new Label(0,1,"1001"); Label lblUname1=new Label(1,1,"Tom"); Label lblUpass1=new Label(2,1,"tompassword"); ws.addCell(lblUid1); ws.addCell(lblUname1); ws.addCell(lblUpass1); Label lblUid2=new Label(0,2,"1002"); Label lblUname2=new Label(1,2,"Jack"); Label lblUpass2=new Label(2,2,"jackpassword"); ws.addCell(lblUid2); ws.addCell(lblUname2); ws.addCell(lblUpass2); //写入工作薄,并关闭一释放内存 wwb.write(); wwb.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * 测试 * @param args */ public static void main(String[] args) { JExcelOperate.writeExcel("src\\new_excel.xls"); JExcelOperate.readExcel("src\\new_excel.xls"); } }
写入Excel的效果:
读取Excel并打印到控制台的效果: