一、jxl.jar概述
应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
Java Excel API 文档
http://www.andykhan.com/jexcelapi/
二、搭建环境
将下载后的文件解包,得到JXL.JAR,放入classpath。如果包不能正常的加载,可以把你下载好的JXL.JAR包放入本机jre的安装目录下,例如 D:\JAVA\jre\lib\ext中。如果想在Eclipse的一个项目中导入JXL.JAR,在该项目上右键,点击“属性”,类别那里选择”库“,点击"添加外部jar”在弹出的文件选择对话框选择你的jxl.jar。
三、创新文件:
新建一个名"Test.xls"的Excel文件,其中第一个工作表被命名为“sheet_one”,代码如下,编译执行后,会在当前位置产生一个Excel文件。
1 package com.test; 2 3 import jxl.*; 4 import java.io.*; 5 6 import jxl.write.*; 7 import jxl.write.biff.RowsExceededException; 8 9 public class CreateExcel { 10 11 public static void main(String[] args) throws RowsExceededException, WriteException{ 12 WritableWorkbook book; 13 try { 14 System.out.println("---start---"); 15 //打开文件 16 book = Workbook.createWorkbook(new File("Test.xls")); 17 18 //生成名为“第一页”的工作表,参数0表示这是第一页 19 WritableSheet sheet = book.createSheet("sheet_one", 0); 20 21 //在Label对象的构造中指名单元格位置是第一列第一行(0,0) 22 //以及单元格内容为Hello World 23 Label label = new Label(0,0,"Hello World"); 24 25 //将定义好的单元格添加到工作表中 26 sheet.addCell(label); 27 28 /*生成一个保存数字的单元格 29 必须使用Number的完整包路径,否则有语法歧义 30 单元格位置是第二列,第一行,值为789.123*/ 31 jxl.write.Number num = new jxl.write.Number(0,1,123.456); 32 sheet.addCell(num); 33 34 //写入数据并关闭文 35 book.write(); 36 book.close(); 37 System.out.println("---end---"); 38 39 } catch (IOException e) { 40 System.out.println(e); 41 } 42 43 } 44 45 }
四、读取文件:
使用我们上面创建的Excel文件为例,做一个简单的读取操作,程序代码如下:
1 package com.test; 2 3 import jxl.*; 4 import jxl.read.biff.BiffException; 5 6 import java.io.*; 7 8 public class ReadExcel { 9 10 public static void main(String[] args) throws BiffException, IOException { 11 Workbook book = Workbook.getWorkbook(new File("Test.xls")); 12 13 //获得第一个工作表对象 14 Sheet sheet = book.getSheet("sheet_one"); 15 //Sheet sheet = book.getSheet(0); 16 17 int rows = sheet.getRows(); 18 int cols = sheet.getColumns(); 19 20 System.out.println("总列数:" + cols); 21 System.out.println("总行数:" + rows); 22 System.out.println("----------------------------"); 23 24 int i=0; 25 int j=0; 26 //循环读取数据 27 for(i=0;i<cols;i++) 28 { 29 for(j=0;j<rows;j++) 30 { 31 System.out.println("第"+j+"行,第"+i+"列为:"+sheet.getCell(i, j).getContents()); 32 } 33 34 } 35 36 } 37 38 }
输出结果:
总列数:1 总行数:2 ---------------------------- 第0行,第0列为:Hello World 第1行,第0列为:123.456
五、修改文件:
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表:
1 package com.test; 2 3 import jxl.*; 4 import java.io.*; 5 6 import jxl.read.biff.BiffException; 7 import jxl.write.*; 8 import jxl.write.biff.RowsExceededException; 9 10 11 public class UpdateExcel { 12 13 public static void main(String[] args) throws BiffException, IOException, RowsExceededException, WriteException{ 14 //获得文件 15 Workbook wb = Workbook.getWorkbook(new File ("Test.xls")); 16 17 //打开一个文件的副本,并且指定数据写回到原文件 18 WritableWorkbook book = Workbook.createWorkbook(new File ("Test.xls"), wb); 19 20 //添加一个工作表 21 WritableSheet sheet = book.createSheet("sheet_two", 1); 22 23 sheet.addCell(new Label(0,0,"Test data for sheet_two")); 24 25 //输出 26 System.out.println(sheet.getCell(0, 0).getContents()); 27 28 book.write(); 29 book.close(); 30 31 } 32 33 }
输出:
Test data for sheet_two