在管理信息系统(Management Information System,简称MIS)中经常会遇到将数据库内容或者是,特定的数据库内容导出为excel表的功能,毕竟excel是办公软件中最常用的表格处理软件,便于分析和增删查改,
下面是一个导出excel实例,可以在很多地方重用,导出的是通讯录的excel文件。附件为使用本代码所需jar包。
import
jxl.Workbook;
import
jxl.format.Alignment;
import
jxl.format.UnderlineStyle;
import
jxl.format.VerticalAlignment;
import
jxl.write.Label;
import
jxl.write.WritableCellFormat;
import
jxl.write.WritableFont;
import
jxl.write.WritableSheet;
import
jxl.write.WritableWorkbook;
/**
*
@Function
Name:
export()
*
@Description
:
*
@return
*
@Description
:
*
@throws
Exception
*
@Date
Created:
Apr
28,
2009
2:32:36
PM
*
@Author
:
gaochao
*
@Last
Modified:
,
Date
Modified:
*/
public
String export()
throws
Exception {
//
根据页面内容生成
excel
表
contactList
= (List) getSession().getAttribute(
"contactlist"
);
int
size =
contactList
.size();
//
得到
list.size()
OutputStream os =
null
;
boolean
b1 =
true
;
try
{
getResponse().reset();
//
清空输出流
os = getResponse().getOutputStream();
//
取得输出流
String fileName =
"
公共通讯录
.xls"
;
//
导出文件名
getResponse().setHeader(
"Content-disposition"
,
"attachment; filename="
+
new
String(fileName.getBytes(),
"ISO-8859-1"
));
//
设定输出文件头
getResponse().setContentType(
"application/msexcel"
);
//
定义输出类型
}
catch
(IOException ex) {
//
捕捉异常
b1 =
false
;
System.
out
.println(
"
流操作错误
:"
+ ex.getMessage());
}
//
生成一个
Exc
的工作空间
//
创建新的
Excel
工作簿
WritableWorkbook workbook = Workbook.createWorkbook(os);
//
生成
Exc
的
Sheet
,
Sheet
名为通讯录导出
WritableSheet sheet = workbook.createSheet(
"
通讯录导出
"
, 0);
//
这里是对
Cell
里面的字体进行格式化
WritableFont wfc =
new
WritableFont(WritableFont.
ARIAL
, 10,
WritableFont.
NO_BOLD
,
false
, UnderlineStyle.
NO_UNDERLINE
,
jxl.format.Colour.
BLACK
);
WritableCellFormat format =
new
WritableCellFormat(wfc);
WritableCellFormat wcfFC =
new
jxl.write.WritableCellFormat();
//
行居中
wcfFC.setAlignment(Alignment.
CENTRE
);
//
列居中
wcfFC.setVerticalAlignment(VerticalAlignment.
CENTRE
);
List<Label> labellist =
null
;
Label labelCk =
null
;
labelCk =
new
Label(0, 0,
"
序号
"
, wcfFC);
sheet.addCell(labelCk);
labelCk =
new
Label(1, 0,
"
姓名
"
, wcfFC);
sheet.addCell(labelCk);
labelCk =
new
Label(2, 0,
"
单位名称
"
, wcfFC);
sheet.addCell(labelCk);
labelCk =
new
Label(3, 0,
"
职务
"
, wcfFC);
sheet.addCell(labelCk);
labelCk =
new
Label(4, 0,
"
单位电话
"
, wcfFC);
sheet.addCell(labelCk);
labelCk =
new
Label(5, 0,
"
手机
"
, wcfFC);
sheet.addCell(labelCk);
labelCk =
new
Label(6, 0,
"QQ"
, wcfFC);
sheet.addCell(labelCk);
labelCk =
new
Label(7, 0,
"
电子邮件
"
, wcfFC);
sheet.addCell(labelCk);
labelCk =
new
Label(8, 0,
"msn"
, wcfFC);
sheet.addCell(labelCk);
//
循环将输出内容加到
sheet
中
for
(
int
i = 1; i < size + 1; i++) {
Contact c = (Contact)
contactList
.get(i - 1);
String cId = String.valueOf(c.getId());
labelCk =
new
Label(0, i, cId, wcfFC);
sheet.addCell(labelCk);
String cName = c.getName();
labelCk =
new
Label(1, i, cName, wcfFC);
sheet.addCell(labelCk);
String cWork = c.getWork();
labelCk =
new
Label(2, i, cWork, wcfFC);
sheet.addCell(labelCk);
String cPost = c.getPost();
labelCk =
new
Label(3, i, cPost, wcfFC);
sheet.addCell(labelCk);
String cTel = c.getWorkTel();
labelCk =
new
Label(4, i, cTel, wcfFC);
sheet.addCell(labelCk);
String cMobile = c.getMobile();
labelCk =
new
Label(5, i, cMobile, wcfFC);
sheet.addCell(labelCk);
String cQq = c.getQq();
labelCk =
new
Label(6, i, cQq, wcfFC);
sheet.addCell(labelCk);
String cEmail = c.getEmail();
labelCk =
new
Label(7, i, cEmail, wcfFC);
sheet.addCell(labelCk);
String cMsn = c.getMsn();
labelCk =
new
Label(8, i, cMsn, wcfFC);
sheet.addCell(labelCk);
}
workbook.write();
workbook.close();
return
"refresh"
;
}
这个链接是个别人写的在
jsp
页面上取得要导出的内容,通过
<% %>
嵌入
java
代码实现功能,可以参考着看一下,本人不建议在
jsp
页面中嵌入
java
代码的形式,除非万不得已;如果
jsp
页面过于臃肿,不仅可维护性差,连可读性也极差。以前看过好几年的高手编的
jsp
页面,长且繁杂,看代码时要来来回回把滚动条拖来拖去,不过还是佩服高手哈
~
附件:http://down.51cto.com/data/2352856
本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/163727,如需转载请自行联系原作者