在进行测试之前,首先在网上下载jxl.jar文件,放到classpath路径下或者放到你的工程中(效果一样,其实就是要在classpath能够找到这个jar包)
好了,下面现在开始做例子
第一步:创建excel文件 CreateExcel.java
- <pre name="code" class="java">package com.lrb.jxl.test;
-
- import java.io.File;
-
- import jxl.Workbook;
- import jxl.write.Label;
- import jxl.write.Number;
- import jxl.write.WritableSheet;
- import jxl.write.WritableWorkbook;
-
- public class CreateExcel {
-
- public static void main(String[] args) {
- try{
- //创建并打开文件c:\\test.xls
- WritableWorkbook book = Workbook.createWorkbook(new File("C:\\test.xls"));
- //生成名为“第一页”的工作表,参数0表示这是第一页
- WritableSheet sheet = book.createSheet("第一页", 0);
- //在Label对象的构造子中指名单元格位置是第一行第一列(0,0)
- //以及单元格内容“test”
- Label l = new Label(0,0,"test");
- //l.setString("this is name"); 设置此格内容
- //将定义好的单元格添加到工作表中
- sheet.addCell(l);
- /**
- * 生成一个保存数字的单元格
- * 必须使用Number的完整包路径,否则有语法歧义
- * 单元格位置是第二列,第一行,值为3.1415926
- */
- Number number = new Number(1,0,3.1415926);
- sheet.addCell(number);
- book.write();
- book.close();
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- }
第二步:更新excel文件 UpdateExcel.java
- package com.lrb.jxl.test;
-
- import java.io.File;
-
- import jxl.Workbook;
- import jxl.write.Label;
- import jxl.write.WritableCellFormat;
- import jxl.write.WritableFont;
- import jxl.write.WritableSheet;
- import jxl.write.WritableWorkbook;
- import jxl.write.WritableFont.FontName;
-
- public class UpdateExcel {
-
- public static void main(String[] args) {
- try {
- //excel获得文件
- Workbook wb = Workbook.getWorkbook(new File("C:\\test.xls"));
- //打开一个文件的副本,并且指定数据写回到原文件
- WritableWorkbook book = Workbook.createWorkbook(new File("c:\\test.xls"),wb);
- //添加一个工作表
- //WritableSheet sheet = book.createSheet("second sheet",1);
- WritableSheet sheet = book.getSheet("second sheet"); //用于第二次读取使用
- /**
- * 单元格操作
- */
- //合并单元格操作(合并第一列第一行到第一列第六行的所有单元格)。合并后的单元格不能再次进行合并,否则会触发异常
- sheet.mergeCells(0, 0, 0, 5);
- //设置第一行的高度为200
- sheet.setRowView(0, 200);
- //设置第一列的宽度为20
- sheet.setColumnView(0, 30);
- /**
- * 字符串格式化操作
- */
- //指定字串格式:字体为TIMES,字号16,加粗显示
- WritableFont font = new WritableFont(WritableFont.TIMES,12,WritableFont.BOLD);
- //WritableCellFormat 指定单元格的各种属性
- WritableCellFormat format1 = new WritableCellFormat(font);
- // 把水平对齐方式指定为居中
- format1.setAlignment(jxl.format.Alignment.CENTRE);
- // 把垂直对齐方式指定为居中
- format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
- //Label类的构造子,指定了字串被赋予那种格式
- sheet.addCell(new Label(0,0,"第二页测试数据",format1));
- book.write();
- book.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- }
-
- }
第三步:读取excel打印 ReadExcel.java- <span style="font-size:10px;">package com.lrb.jxl.test;
-
- import java.io.File;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
-
- import jxl.Cell;
- import jxl.CellType;
- import jxl.DateCell;
- import jxl.NumberCell;
- import jxl.Sheet;
- import jxl.Workbook;
- import jxl.read.biff.BiffException;
-
- public class ReadExcel {
-
- public static void main(String[] args) throws BiffException, IOException {
- //打开文件
- Workbook book = Workbook.getWorkbook(new File("C:\\test.xls"));
- //获得第一个工作表对象
- Sheet sheet = book.getSheet(0);
- //如果知道工作表的名字,也可使用如下方法获得指定名称的工作表对象
- Sheet sheet1 = book.getSheet("second sheet");
- //获得第一列第一行的单元格
- Cell cell = sheet.getCell(0, 0);
- String result = cell.getContents();
- //获得工作表名称
- System.out.println("第一个工作表名称:"+sheet.getName());
- //获得列数
- System.out.println("列数:"+sheet.getColumns());
- //获得行数
- System.out.println("行数"+sheet.getRows());
- System.out.println("根据下标取得第一列第一行数据:"+result);
- /**
- * 在用jxl解析excle的时候,如果excel中有小数,
- * 如果小数点后的位数多的化,可能会用科学技术法来显示结果,
- * 为了避免显示科学计数法,可以通过两个办法来解决
- * 1:将excel的小数的cell格的格式改成字符串型。
- * 2:用下面的程序处理。
- */
- Cell cel = sheet.getCell(1,0);
- String data = cel.getContents();
- if(cel.getType() == CellType.DATE){
- DateCell dc = (DateCell)cel;
- data = new SimpleDateFormat("YYYY-MM-DD").format(dc.getDate());
- }else if(cel.getType() == CellType.NUMBER || cel.getType() == CellType.NUMBER_FORMULA){
- NumberCell nc = (NumberCell) cel;
- data = ""+nc.getValue();
- }
-
- System.out.println("第二列第一行数据:"+data);
- System.out.println("=====================================");
-
- Cell cell1 = sheet1.getCell(0, 0);
- String result1 = cell1.getContents();
- //获得工作表名称
- System.out.println("第一个工作表名称:"+sheet1.getName());
- //获得列数
- System.out.println("列数:"+sheet1.getColumns());
- //获得行数
- System.out.println("行数"+sheet1.getRows());
- System.out.println("根据名称得到sheet数据第一列第一行:"+result1);
- book.close();
- }
- }</span><span style="font-weight: bold; font-size: 16px; ">
- </span>
题外话:jxl目前不支持2007及其以后的版本,如果需要可以使用POI。如果你是2007或以上版本,切记不可通过直接修改文件后缀名来使其支持文件的读写操作。
转自: