利用jxl实现excel操作

本文详细介绍了JavaExcel jxl框架的功能与使用方法,包括如何读取Excel文件内容、创建及更新Excel文件等操作。此外还提供了具体的代码示例,帮助读者更好地理解和运用jxl框架。
前面引用一段摘抄下来的关于jxl的介绍:
Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该 API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、 Servlet来调用API实现对Excel数据表的访问。

以下是我根据网上和api写的一个简单的例子:
packageexcel;

importjava.io.*;

importjxl.*;
importjxl.write.*;
importjxl.format.*;

/***//**
*实现对Excel报表的操作.调用了开源框架jxl.
*
@authorshengyan
*
@since
*
@version0.0.0.1
*/

publicclassExcelHandle...{

/***//**
*实现对excel报表的读取.
*
@paramsourcefile<code>String<code>parsepathoffile
*/

publicvoidreadExcel(Stringsourcefile)...{
try...{
//构建Workbook对象,只读Workbook对象
//直接从本地文件创建Workbook
//从输入流创建Workbook
InputStreamis=newFileInputStream(sourcefile);
//获得workbook工作薄
Workbookrwb=Workbook.getWorkbook(is);
//Workbookrwb=Workbook.getWorkbook(newFile(sourcefile));
//获取第一张Sheet工作表
Sheetrs=rwb.getSheet(0);
//获取第一行,第一列的值
Cellc00=rs.getCell(0,0);
Stringstrc00
=c00.getContents();
//获取第一行,第二列的值
Cellc10=rs.getCell(1,0);
Stringstrc10
=c10.getContents();
//获取第二行,第二列的值
Cellc11=rs.getCell(1,1);
Stringstrc11
=c11.getContents();
//获得cell具体类型值的方式
if(c00.getType()==CellType.LABEL)...{
LabelCelllabelc00
=(LabelCell)c00;
System.out.println(labelc00.getString());
}

System.out.println(
"Cell(0,0)"+"value:"+strc00
+";type:"+c00.getType());
System.out.println(
"Cell(1,0)"+"value:"+strc10
+";type:"+c10.getType());
System.out.println(
"Cell(1,1)"+"value:"+strc11
+";type:"+c11.getType());
rwb.close();
is.close();
}
catch(Exceptione)...{
e.printStackTrace();
}


}


/***//**
*实现写Excel报表
*
@paramsourcefile<code>String<code>parsepathoffile
*/

publicvoidwriteExcel(Stringsourcefile)...{
try...{
Filefile
=newFile(sourcefile);
file.createNewFile();
OutputStreamos
=newFileOutputStream(file);
//获得workbook
WritableWorkbookwwb=Workbook.createWorkbook(os);
//WritableWorkbookwwb=Workbook.createWorkbook(newFile(sourcefile));
//获得sheet1.名字,2.下标(从0开始)
WritableSheetws=wwb.createSheet("TestSheet1",0);

//行高和列宽
//将第一行的高度设为200
ws.setRowView(0,200);
//将第一列的宽度设为30
ws.setColumnView(0,30);

//1.添加的字体样式
/**//*
*获得字体
*第一个:TIMES是字体大小,他写的是18
*第二个:BOLD是判断是否为斜体,选择true时为斜体
*第三个:ARIAL
*第四个:UnderlineStyle.NO_UNDERLINE下划线
*第五个:jxl.format.Colour.RED字体颜色是红色的
*/

WritableFontwf
=newWritableFont(WritableFont.TIMES,18,
WritableFont.BOLD,
true);
WritableCellFormatwcfF
=newWritableCellFormat(wf);
/**//*
*在Label()方法里面有三个参数
*第一个是代表列数,
*第二是代表行数,
*第三个代表要写入的内容
*第四个是可选项,是输入这个label里面的样式
*/

LabellabelC
=newLabel(1,0,"ThisisaLabelcell",wcfF);
//把内容写进sheet里面
ws.addCell(labelC);

//合并cell单元格
Rangerang=ws.mergeCells(0,6,2,7);
WritableCellFormatccf
=newWritableCellFormat();
//把水平对齐方式指定为居中
ccf.setAlignment(jxl.format.Alignment.CENTRE);
//设置自动换行
ccf.setWrap(true);
Labellabelz
=newLabel(0,6,"mergelabel",ccf);
//Cellcell=rang.getTopLeft();
ws.addCell(labelz);

//3.添加Number对象
//3.1显示number对象数据的格式
//带有formatting的Number对象
NumberFormatnf=newjxl.write.NumberFormat("#.##");
WritableCellFormatwcfN
=newjxl.write.WritableCellFormat(nf);
/**//*
*Number()方法参数说明:
*前两上表示输入的位置
*第三个表示输入的内容
*/

jxl.write.NumberlabelNF
=newjxl.write.Number(1,1,3.1415926,wcfN);
ws.addCell(labelNF);

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

//5.添加DateTime对象
/**//*
*DateTime()方法的参数说明
*前两个表示输入的位置
*第三个表示输入的当前时间
*/

jxl.write.DateTimelabelDT
=newjxl.write.DateTime(0,3,newjava.util.Date());
ws.addCell(labelDT);

//6.添加带有formatting的DateFormat对象
jxl.write.DateFormatdf=newjxl.write.DateFormat("ddMMyyyyhh:mm:ss");
jxl.write.WritableCellFormatwcfDF
=newjxl.write.WritableCellFormat(df);
jxl.write.DateTimelabelDTF
=newjxl.write.DateTime(1,3,newjava.util.Date(),wcfDF);
ws.addCell(labelDTF);

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

//8.设置单元格样式
wcfFC.setBackground(jxl.format.Colour.RED);//设置单元格的颜色为红色
ws.addCell(newjxl.write.Label(6,0,"ilovechina",wcfFC));

//9.添加图片对象,jxl只支持png格式图片*pV)-s
Fileimage=newFile("c:/2.png");
WritableImagewimage
=newWritableImage(0,1,2,2,image);
ws.addImage(wimage);

//写入excel
wwb.write();
wwb.close();
os.close();
}
catch(Exceptione)...{
e.printStackTrace();
}

}


publicstaticvoidmain(String[]args)...{
ExcelHandlere
=newExcelHandle();
Stringsourcefile
="c:/Book1.xls";
Stringtagfile
="c:/Book1.xls";
re.writeExcel(sourcefile);
re.readExcel(tagfile);
}


}

在jsp中做相关测试,创建一个writeExcel.jsp
<%
response.reset();//清除Buffer
response.setContentType("application/vnd.ms-excel");
File fileWrite = new File("f:/testWrite.xls");
fileWrite.createNewFile();
new FileOutputStream(fileWrite);
ExcelHandle.writeExcel(new FileOutputStream(fileWrite));
%>
在IE中浏览writeExcel.jsp就可以动态生成Excel文档了,其中response.setContentType ("application/vnd.ms-excel");语句必须要,才能确保不乱码,在jsp中输入<%@page contentType="application/vnd.ms-excel;charset=GBK"%>不行。


下面是jxl中经常使用的几个类或接口的中文注释.

Workbook类提供的方法

1. int getNumberOfSheets()

获得工作薄(Workbook)中工作表(Sheet)的个数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

int sheets = rwb.getNumberOfSheets();

2. Sheet[] getSheets()

返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

Sheet[] sheets = rwb.getSheets();

3. String getVersion()

返回正在使用的API的版本号,好像是没什么太大的作用。

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

String apiVersion = rwb.getVersion();

Sheet接口提供的方法

1) String getName()

获取Sheet的名称,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

jxl.Sheet rs = rwb.getSheet(0);

String sheetName = rs.getName();

2) int getColumns()

获取Sheet表中所包含的总列数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

jxl.Sheet rs = rwb.getSheet(0);

int rsColumns = rs.getColumns();

3) Cell[] getColumn(int column)

获取某一列的所有单元格,返回的是单元格对象数组,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

jxl.Sheet rs = rwb.getSheet(0);

Cell[] cell = rs.getColumn(0);

4) int getRows()

获取Sheet表中所包含的总行数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsRows = rs.getRows();

5) Cell[] getRow(int row)

获取某一行的所有单元格,返回的是单元格对象数组,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getRow(0);

6) Cell getCell(int column, int row)

获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,这与通常的行、列组合有些不同。

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell cell = rs.getCell(0, 0);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值