[<摘自>飞:jxl简析:http://www.emlog.net/fei]

(二)应用

在进行实践前 , 我们需要对 excel 有一个大致的了解 ,excel 文件由一个工作簿 (Workbook) 组成 , 工作簿由工作表 (sheet) 组成 , 每个工作表又由很多单元格 (cell) 组成 . 工作簿有自己的特征 , 同样工作表 , 单元格也一样 . 从大局上了解了 excel 文件 , 对于我们更好的使用 jxl 是有一定的帮助的 . 具体请查看(一) API

在 jxl 中其大概的层次是这样的

名称

属性

Workbook

WorkbookSettings

Sheet

SheetSettings

Cell

CeLlFormat CellFeatures CellView CellType

Jxl 读 excel :

得到工作簿的方法主要有四个 :

getWorkbook(File file)

getWorkbook(File file,WorkSettings ws)

getWorkbook(InputStream is)

getWorkbook(InputStream is,WorkSettings ws)

参数有两个 :

第一个参数是必须的 : 文件或输入流 ,

第二个参数 : 工作簿 ws 是作为读出来的 excel 的一些约定 , 如地区 , 编码等 .

如果文件错误或格式错误 , 将会抛出 BiffException 或 IOException.

代码段 :

Workbook wb=null;

try

{

wb = Workbook.getWorkbook(excelFile);

wb.close();

}

catch(BiffException ex){

// 转换错误

}catch(IOException ex){

//IO 错误

}

以上如果一切正常的话 , 将得到此 excel 文件的工作簿 . 接下来我们就可以通过此文件簿得到其他的东西了 . 以下是得到工作表有关的方法

int getNumberOfSheets()// 工作表个数

Sheet getSheet(String  name);// 得到此对应名称的工作表

Sheet getSheet(int index);// 得到此序列号的工作表

Sheet[] getSheets();// 得到工作表数组

String[] getSheetNames();// 得到工作表名称数组

示例代码如下:

Sheet sheet;

if(wb.getNumberOfSheets()>0)

{

sheet = wb.getSheet(0);

}

以下的方法除非特别目的,否则用到的地方不多.

Range[] finaName(String name);// 得到此名称的表格区

Cell findCellByName(String name);// 得到此名称的 Cell

Cell getCell(String loc)

String[] getRangeNames();

与文件是否可写有关的

boolean isProected();

得到了工作簿文件的某个工作表时.

对于工作表而言其主要的内容就是单元格了.

// 根据内容查看

Cell findCell(Pattern pattern,int firstCol,int firstRow,int lastCol,int lastRow,Boolean reverse)

Cell findCell(String content)

Cell findCell(String content,omt forstCol,int firstRow,int lastCol,int lastRow,Boolean reverse)

LabelCell findLabelCell(String contents)

// 根据位置得到

Cell getCell(int col,int row)

Cell getCell(String loc)//loc 的格式为 A3/B1/C3 其相同于

getCell(CellReferenceHelper.getColumn(loc0,CellReferenceHelper.getRow(loc)), 所以相对而言其性能没有 Cell getCell(int col,int row) 快

// 单元格数组

Cell[] getRows(int row)// 当前行单元格数组

Cell[] getCols(int col)// 当前列单元格数组

// 特殊单元格数组

// 超链接表格

Hyperlink[] getHyperlinks();// 超链接数组

// 区域表格

Range[] getMergedCells();// 区域单元格数组

// 图像表格

Int getNumberOfImages()// 拥有图片数

Image getDrawing(int index)// 对应序号的图片

// 工作表或多个表格一些自我属性

String getName()// 工作表名

int getRows()// 行数

int getCols()// 列数

SheetSettings getSettings()// 工作表设置

CellView getColumnView(int col)// 此列的表格视图

CellView getRowView(int row)// 此行的表格视图

以下是与单元格有关的一些操作:

CellFeatures getCellFeatures()// 主要是与表格内容有关的一些性质如验证等

CellFormat getCellFormat()// 主要是表格外在表现格式有关的一些性质.

int getColumn()// 所在列

int getRow()// 所在行

String getContents();// 内容

boolean  isHidden();// 可见否

CellType getType();// 表格类型 如果不确定表格如果转换则可以使用此方法来确定表格类型.

以下我们讲述如何写 excel 文件.

写文件分为两种情况 一种是新建一种则是更新.

新建 excel 文件

新建 excel 文件很简单:

// 文件

WritableWorkbook createWorkbook(File file) // 无形式的创建一个 excel 文件

WritableWorkbook createWorkbook(File file Workbook in)

// 以 in 一样的格式创建一个 excel 文件,其初始内容与 in 文件相同 ( 更新文件可以用到此方法 )

WriteableWorkbook createWorkbook(File file,WorkSetting ws)// 以 ws 的设定创建文件

WritableWorkbook createWorkbook(File file,Workbook in,WorkSetting ws)

// 以 ws 的设定创建一个与 in 文件相同的文件

// 流

WritableWorkbook createWorkbook(OutputStream os)

WritableWorkbook createWorkbook(OutputStream os Workbook in)

WriteableWorkbook createWorkbook(OutputStream os,WorkSetting ws)

WritableWorkbook createWorkbook(OutputStream os,Workbook in,WorkSetting ws)

代码示例:

WritableWorkbook wrb;

WriteableWorkbook wrbin;

try

{

wrb =  Workbook.createWorkbook(targetfile);

wrbin = Workbook.createWorkbook(targetfile,wb);

}

catch (IOexception e)

{

//IO 错误

}

当创建好工作簿时,我们就需要新建工作表了

WritableSheet createSheet(String name,int index);

WritableSheet wrs  = wrb.createSheet(“demo”,0);

// 创建一个名为 demo 的工作表,其为工作簿的第一个工作表.

接下来我们就可以进行其他操作了

添加文本类单元格:

Label   label = new Label(0,0,””);

wrb.addCell (label);

// 添加数据单元格

Number number = new Number(0,3,1234);

wrb.addCell (number);

// 添加时间单元格

DateTime dt = new DateTime(0,4,new Date());

Wrb.addCell (dt);

// 添加公式单元格

Fornual formual = new Formual(0,11,”Sum(A1:A9)”);

wrb.addCell (formual);

添加超链接类单元格

WirtableHyperlink wrlink =

new WritableHyperlink(0,1,0,1,new URL(“www.emlog.net/fei”),”emlog”);

wrb.addHyperlink (wrlink);

// 添加图像

WritableImage wrimage=new WritableImage(1,5,10,10,new File(imageFilepath));

wrb.addImage (wrimage);

// 注意, API 中注明只支持 png 文件,然而我用其他格式的图片,通过将其后缘改为 png 也能放到 excel 文件中.果然,在查看其具体源代码时,发现作者只是检测了文件的后缀名,如果不对 给出警告,并没有从图像文件的具体格式进行检测.

当然,表格中的数据算是表格的核心部分,但是同时 API 也提供了大量的其他方法来丰富表格的显示.在此,大家具体在使用过程中进行运用就行.

// 最后,写完表格后,不要忘记进行写操作,也就是常说的保存

wrb.write()

wrb.close(); 保存完后关闭相应资源是一个合格的程序员应该做的.

接下来,我们就来讲述写文件的另一方面:更新文件.有时候,并不仅仅只是需要新写文件,可能需要对已有文件进行更新.这时候我们可以这么来实现.

Workbook wb= Workbook.getWorkbook(modifyFile);

WritableWorkbook wrb = Workbook.createWorkbook(modifyFile, wb);

以上就实现了得到一个已存在的文件的可修改副本.

// 得到第一个工作表

WritableSheet wrs = wrb.getSheet(0);

// 得到 A0 单元格

Cell cell = Wrs.getCell(0,0);

// 对单元格格式进行判断

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

Label label=(Label) cell;

label.setString(“u r modified.”);

}//modify end

//save excel

wrb.write();

wb.close();

wrb.close();

    以上就简单的完成了一次 excel 文件的修改. API 中还提供了复制工作表,复制单元格等操作,大家可以通过查询 API 来了解其具体的用法. 我们可以从作者提供的包中得到很多关于如何使用API的示例.此处不献丑了 .jxl官文网站:http://www.andykhan.com/jexcelapi/index.html

<摘自>飞:jxl简析2 [ http://www.emlog.net/fei ]的更多相关文章

  1. <摘自>飞:jxl简析[ http://www.emlog.net/fei ]

    <摘自>飞:jxl简析:http://www.emlog.net/fei 最近,完成了一个网上报表系统,刚巧用到了一个 JAVA 操作 excel 表格的 API .闲来无事,就将其大概的 ...

  2. SpringMVC学习(一)——概念、流程图、源码简析

    学习资料:开涛的<跟我学SpringMVC.pdf> 众所周知,springMVC是比较常用的web框架,通常整合spring使用.这里抛开spring,单纯的对springMVC做一下总 ...

  3. 简析.NET Core 以及与 .NET Framework的关系

    简析.NET Core 以及与 .NET Framework的关系 一 .NET 的 Framework 们 二 .NET Core的到来 1. Runtime 2. Unified BCL 3. W ...

  4. 简析 .NET Core 构成体系

    简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...

  5. RecycleView + CardView 控件简析

    今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...

  6. Java Android 注解(Annotation) 及几个常用开源项目注解原理简析

    不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...

  7. PHP的错误报错级别设置原理简析

    原理简析 摘录php.ini文件的默认配置(php5.4): ; Common Values: ; E_ALL (Show all errors, warnings and notices inclu ...

  8. Android 启动过程简析

    首先我们先来看android构架图: android系统是构建在linux系统上面的. 所以android设备启动经历3个过程. Boot Loader,Linux Kernel & Andr ...

  9. Android RecycleView + CardView 控件简析

    今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...

随机推荐

  1. .NET Core使用FluentEmail发送邮件

    前言 在实际的项目开发中,我们会遇到许多需要通过程序发送邮件的场景,比如异常报警.消息.进度通知等等.一般情况下我们使用原生的SmtpClient类库居多,它能满足我们绝大多数场景.但是使用起来不够简 ...

  2. 多测师讲解python_模块(导入模块和内置模块)_高级讲师肖sir

    #自定义模块# from aaa import * #指定导入某个包中具体的类.函数.方法## A.fun1(2,2) #import +模块名 :# # import +模块名+.+.+# # 导入 ...

  3. linux centos 04

    1.python的虚拟环境 1.将当前机器上的解释器作为一个 本地,复制出的很多歌 虚拟解释器 物理机上的 本体解释器 ,什么事也不做 分身1:  解释器1:虚拟环境1     运行django  1 ...

  4. 程序员,想被别人发掘?那你有 freestyle 吗?

    程序员群体是偏内向的,整天和计算机打交道,用代码说话,接受任务,默默工作. 如果这些任务是有挑战性的还行,你的工作成果就能帮你说话,可是大部分工作都是普普通通的,甚至有点儿重复性的劳动. 这个时候表面 ...

  5. Martyr2项目实现——Number部分的问题求解 (1) Find Pi to Nth Digit

    Martyr2项目实现--Number部分的问题求解 (1) Find Pi to Nth Digit Find Pi to Nth Digit 问题描述: Find PI to the Nth Di ...

  6. Python之集合详解

    定义: 1.不同元素组成 2.无序 3.集合中的元素必须是不可变类型 创建集合 s = {1,2,3,4,5,6,7,8} 1.定义可变集合 >>> set_test = set(' ...

  7. Cypress系列(70)- server() 命令详解

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 作用 启动服务器以开始将响应路由到 cy ...

  8. 5年Android程序员面试字节跳动两轮后被完虐,请查收给你的面试指南

    大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助. 最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了- 所以 ...

  9. LruCache缓存bitmap(二)

    Lrucache缓存程序关闭缓存自动清除,所以要在onstart方法中调用,只要不关闭程序缓存就在,除以1024是以kb为单位 public class MainActivity extends Ap ...

  10. Navicat连接远程MySQL8.0数据库

    前言: 如果你有一台服务器,并且安装了Mysql8.0及以上版本数据库.此时想通过本地Navicat软件连接远程服务器上的mysql数据库.那么接下来你就要完成以下准备工作: 登录远程服务器上的数据库 ...