JXL 工具包

   JXL 工具包

读文件(jxl包)

写文件(Jxl.write包)

说明

Workbook

WritableWorkbook

操作Excel文档的工作薄

Sheet

WritableSheet

操作Excel文档的工作表

Cell

WritableCell

操作Excel文档的单元格

Image

WritableImage

操作Excel文档的图像

Hyperlink

WritableHtperlink

操作Excel文档的超链接

 JxlAPI我们主要用的就3个包(jxl, jxl.write,jxl.format) ,jxl能支持对 Excel 文档的读,写,删除,修改的操作,对java更好的支持,而且不依赖于windows操作系统,我们都知道excel 文档分为工作薄,工作表,以及单元格组成,下面我们来理解一下jxl 中的各个

类及对excel文档的操作。

单元格(此处指文本单元格,图像及链接和单元格做为一个层次)分为好多种,所以在API的设计中将Cell作为一个接口而存在.

    对应的jxl中的结构为:

读文件(包jxl)

写文件(包jxl.write)

说明

Cell

WritableCell

单元格

BooleanCell

Boolean

布尔值单元格

DateCell

DateTime

时间单元格

ErrorCell

 

形式错误的单元格

LabelCell

Label

文本单元格

NumberCell

Number

数字单元格

FormualCedll

Formual

公式单元格

 

Blank

空格单元格

BooleanFormualCell

 

布尔公式单元格

DateFormualCell

 

时间公式单元格

ErrorFormualCell

 

错误公式单元格

StringFormualCell

 

文本公式单元格

NumberFormualCell

 

数字公式单元格

 

 

 

 

 

 

 

虽然数据是电子表格的核心,但是同时其也需要一些辅助类 比如文件格式设置,工作表设置与显示效果.单元格设置与显示效果等.按照其层次,则依次有以下接口或类.

读文件(包jxl)

写文件(包jxl.write)

说明

WorkbookSettings

WorkbookSettings(包jxl)

设置workbook

属性的bean

SheetSettings

SheetSettings(包jxl)

设置具体sheet的属性的bean(比如表头表底等)

HeaderFooter

HeaderFooter(包jxl)

表示表头表底类

HeaderFooter.Contents

HeaderFooter.Contents(包jxl)

具体表头表底设置

CellFeatures

WritableCellFeautres

表格内容相关设置(验证)

CellReferenceHelper

 

得到引用单元格相关属性

CellType

 

表格相关类型

CellView

CellView(包jxl)

表格视图相关设置

CellFormat

WritableCellFormat

表格显示样式设置

 

BoldStyle

边框枚举

 

DateFormat

时间格式

 

DateFormats

时间格式枚举

 

NumbreFormat

数据格式

 

NumbreFormats

数字模式枚举

 

WritableFont

字体设置

 

WriteableFont.Fontname

静态字体内部类

下面还有一个jxl.format包,里面主要是有关一些字体的设置及样式的设置的一些接口和类。

以上是我们了解的jxl的API 及里面的常用类的一个说明 下面我们具体的来讲以下怎么用jxl包来操作excel文档,毕竟只说不做有点不太好吧。

 

 

 

读取Excel文档中的数据

上面说了,读取文档中的数据主要用到Workbook,sheet,cell 3个类,下面有一段代码:

 

publicvoid readExcel(File file){

        try {

            Workbook book = Workbook.getWorkbook(file);//获取Workbook的实例

            Sheet sheet = book.getSheet(0);//获取sheet的实例

            int columns = sheet.getColumns();//获取工作表的列数

            int rows = sheet.getRows();//获取工作表的行数

            Cell cell = null;

            String word = null;

            for (int i = 0; i < rows; i++) {

                for (int j = 0; j < columns; j++) {

                    cell = sheet.getCell(j,i);//获取某行某列单元格

                    word  = cell.getContents();//获取单元格中的内容

                    if (cell.getType() == CellType.LABEL) {//判断单元格中的数据类型

                        LabelCell lc= (LabelCell)cell;

                        word = lc.getString();//获取数据的字符串形式

                        System.out.println(word);//输出

                    }

                }

            }

            book.close();

        } catch (FileNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (BiffException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

1.      Workbook类

Workbook,工作簿类,它是一个抽象类,所以不能通过new来获取实例, 只能通过 Workbook的静态方法getWorkbook()来获取他的实例,他的实例是new它的子类WorkbookParser来实现的,WorkbookParser在jxl.read.biff中。它继承了java.lang包中的Object类,其中有几个方法是经常用的:

a.staticWritableWorkbook CreateWorkbook(File file); 它可以通过文件名来获取一个可写的 WritableWorkbook 实例。

b.abstractSheet getSheet(int index); 它可以通过下标来获取该文档的工作表,下表从0开始,它的子类WorkbookParser 复写了一个方法。

c.staticWorkbook getWorkbook(File file);这是一个工厂方法,通过他返回的是一个Workbook的子类WorkbookParser的一个实例,这是多态的一种表现。

2.      Sheet接口
Sheet接口 工作表类,它是通过WorkbookParser的getSheet()方法来获取它的子类 SheetImpl 的实例,SheetImpl也在jxl.read.biff中。其中就几个常用的方法。

a.      Cell getCell(int column,introw);它通过列标,行标来获取本工作表的某个单元格。

b.      int getColumns(); 获取此工作表的列数。

c.      int getRows(); 获取此工作表的行数。

3.      Cell接口单元格类,可以通过他获取单元格中的数据类型。

a.      CellType getType();获取这个单元格的数据类型,然后和LabelCell进行类型比较,强转成LabelCell,通过getString() 方法获取其中类容。

写入Excel文档数据

下面先看以下代码:

publicvoid writeExcel(File file){

        WritableWorkbook  book = null;

        WritableSheet stu_sheet = null;

        try {

            book =  Workbook.createWorkbook(file);

            stu_sheet = book.createSheet("学生",0);

            Label label  = null;

            label = new Label(0,0,"编号");

            stu_sheet.addCell(label);

            label = new Label(1,0,"姓名");

            stu_sheet.addCell(label);

            label = new Label(2,0,"性别");

            stu_sheet.addCell(label);

            label = new Label(3,0,"年龄");

            stu_sheet.addCell(label);

            book.write();

            book.close();

        } catch (RowsExceededException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (WriteException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

   }

要往xls文件里面写入数据的时候需要注意的是第一要新建一个xls文件

OutputStream os=newFileOutputStream("c:\\excel2.xls");

再建完这个文件的时候再建立工作文件

jxl.write.WritableWorkbook wwb =Workbook.createWorkbook(new File(os));

如果这个文件已经存在,那么我们可以在这个文件里面加入一个sheet为了和以前的数据进行分开;

jxl.write.WritableSheet ws =wwb.createSheet("Test Sheet 1", 0);

在createSheet方法里前面的参数是sheet名,后面是要操作的sheet号写入文件要用到下面几个类。

1.      WirtableWorkbook

a.void close ();关闭;

    b.WritableSheet getSheet (int index);返回第index个可写工作表;

    c. WritableSheet moveSheet (int fromIndex, int toIndex);把fromIndex的工作表移动到toIndex处.

    d.void removeSheet (int index);删除这个工作表;

    e.void write ();代表已写完;

2.      WirtableSheet

  1. void addCell(WritableCell cell); 添加单元格到本表。
  2. WritableCell getWritableCell(int column, int row); 获取本表的某个可写的单元格。
  3. void removeRow(int row);删除某行
  4. void removeColumn(int col);删除某列

3.      Label

  1. void setString(java.lang.String s)设置Label中的内容。

修改Excel文档数据

Jxl在修改excel文件时使用的方法比较怪,也可以说jxl不支持修改excel文件。它的处理方式是每次打开旧excel文件,然后创建一个该excel文件的可写的副本,所有的修改都是在这个副本上做的。下面是一个例子。 

publicvoid updateExcel(File file){

        WritableWorkbook book = null;

        Workbook book1 = null;

        try {

            book1 = Workbook.getWorkbook(file);

            book = Workbook.createWorkbook(file,book1);

            WritableSheet sheet = book.getSheet(0);

            WritableCell cell = sheet.getWritableCell(0,0);

            if (cell.getType() == CellType.LABEL) {

                Label label = (Label) cell;

                label.setString("学号");

                System.out.println("修改成功");

            }

            book.write();

            book.close();

        }catch (IndexOutOfBoundsException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (WriteException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (BiffException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

删除Excel文档数据

publicvoid deleteExcel(File file){

        WritableWorkbook book =null;

        try {

            book = Workbook.createWorkbook(file);

            WritableSheet sheet = book.createSheet("学生",0);

            sheet.removeRow(0);

            book.write();

            book.close();

            System.out.println("删除成功!");

        } catch (IndexOutOfBoundsException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (WriteException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

填充数据

(1)添加的字体样式 
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18,WritableFont.BOLD, true); 
WritableFont()方法里参数说明: 
这个方法算是一个容器,可以放进去好多属性 
第一个: TIMES是字体大小,他写的是18 
第二个: BOLD是判断是否为斜体,选择true时为斜体 
第三个: ARIAL 
第四个: UnderlineStyle.NO_UNDERLINE 下划线 
第五个: jxl.format.Colour.RED 字体颜色是红色的

jxl.write.WritableCellFormat wcfF = newjxl.write.WritableCellFormat(wf);

jxl.write.Label labelC = newjxl.write.Label(0, 0, "This is a Label cell",wcfF); 
ws.addCell(labelC); 
在Label()方法里面有三个参数 
第一个是代表列数, 
第二是代表行数, 
第三个代表要写入的内容 
第四个是可选项,是输入这个label里面的样式 
然后通过写sheet的方法addCell()把内容写进sheet里面。

(2)添加带有formatting的Number对象 
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");

(3)添加Number对象 
(3.1)显示number对象数据的格式

jxl.write.NumberFormat nf = newjxl.write.NumberFormat("#.##"); 
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);

jxl.write.Number labelNF = newjxl.write.Number(1, 1, 3.1415926, wcfN); 
ws.addCell(labelNF); 
Number()方法参数说明: 
前两上表示输入的位置 
第三个表示输入的内容

(4)添加Boolean对象 
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false); 
ws.addCell(labelB);

(5)添加DateTime对象 
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, newjava.util.Date()); 
ws.addCell(labelDT); 
DateTime()方法的参数说明 
前两个表示输入的位置 
第三个表示输入的当前时间

(6)添加带有formatting的DateFormat对象 
这个显示当前时间的所有信息,包括年月日小时分秒 
jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyyhh:mm:ss"); 
jxl.write.WritableCellFormat wcfDF = newjxl.write.WritableCellFormat(df); 
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, newjava.util.Date(), wcfDF); 
ws.addCell(labelDTF);

(7)添加带有字体颜色Formatting的对象 
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10,WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED); 
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);

import="jxl.format.* 
jxl.write.WritableFont wfc = newjxl.write.WritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);

(8)设置单元格样式

jxl.write.WritableCellFormat wcfFC = newjxl.write.WritableCellFormat(wfc); 
wcfFC.setBackGround(jxl.format.Colour.RED);//设置单元格的颜色为红色 
wcfFC = new jxl.write.Label(6,0,"i love china",wcfFC);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值