1.下載jxl.rar包
項目地址:
http://www.andykhan.com/jexcelapi/
下載地址:
http://www.andykhan.com/jexcelapi/download.html
目前版本的信息
Reads data from Excel 95, 97, 2000 workbooks
Reads and writes formulas (Excel 97 and later only)
Generates spreadsheets in Excel 2000 format
Supports font, number and date formatting
Supports shading and colouring of cells
Modifies existing worksheets
Supports image creation
Preserves macros on copy
Customizable logging
2.把包放到WEB-INF的lib目錄下在開發環境中引入這個包
3.開始寫代碼了,這里以一個Struts1.2的ActionMethod為例,其實只要能取了request和response對象,操作都是一樣的的。
1
/** *//**
2
* 生成信息的XLS
3
* alex 2007-7-3 下午05:01:56
4
*/
5
public ActionForward makeRichVoteRZ(ActionMapping mapping, ActionForm form,
6
HttpServletRequest request, HttpServletResponse response)
7
throws Exception
{
8
9
//讀出數據
10
String richvote_id = Common.getValue("richvote_id", request);
11
String sql = "select user_name,user_sex,user_address,card_id,postalcode,mobile,tel_day,email from tbl_member where member_id in (select user_id from tbl_vote_detail where vote_id in(select vote_id from tbl_vote where vote_board = '"+richvote_id+"'))";
12
RowSet rs = table.select(sql);
13
14
//生成xls
15
try
{
16
17
response.setContentType("application/vnd.ms-excel");
18
response.addHeader("Content-Disposition","attachment; filename=\"" + Common.getFileName()+".xls" + "\"");
19
OutputStream os = response.getOutputStream();
20
WritableWorkbook wwb = Workbook.createWorkbook(os);
21
22
23
int ncout = rs.length();
24
int maxnum = 50000; //一次最多寫入量
25
int times = (ncout+maxnum-1)/maxnum;
26
27
//大循環
28
for(int t=0; t<times; t++)
{
29
30
//新建一張表
31
WritableSheet wsheet = wwb.createSheet("members_"+(t+1),t);
32
//設置表頭
33
Label label = new Label(0,0,"");
34
wsheet.addCell(label);
35
label = new Label(0,0,"會員姓名");
36
wsheet.addCell(label);
37
label = new Label(1,0,"卡號");
38
wsheet.addCell(label);
39
label = new Label(2,0,"聯系地址");
40
wsheet.addCell(label);
41
label = new Label(3,0,"郵編");
42
wsheet.addCell(label);
43
label = new Label(4,0,"聯系電話");
44
wsheet.addCell(label);
45
label = new Label(5,0,"手機");
46
wsheet.addCell(label);
47
label = new Label(6,0,"Email");
48
wsheet.addCell(label);
49
label = new Label(7,0,"性別");
50
wsheet.addCell(label);
51
52
53
//讀出數據
54
int base = (t*maxnum);
55
for(int i = 0; i < rs.length(); i++)
{
56
Row rw = rs.get(i+base);
57
//System.out.println((i+1));
58
label = new Label(0,(i+1),(String)rw.get("user_name") );
59
wsheet.addCell(label);
60
label = new Label(1,(i+1),(String)rw.get("card_id"));
61
wsheet.addCell(label);
62
label = new Label(2,(i+1),(String)rw.get("user_address"));
63
wsheet.addCell(label);
64
label = new Label(3,(i+1),(String)rw.get("postalcode"));
65
wsheet.addCell(label);
66
label = new Label(4,(i+1),(String)rw.get("tel_day"));
67
wsheet.addCell(label);
68
label = new Label(5,(i+1),(String)rw.get("mobile"));
69
wsheet.addCell(label);
70
label = new Label(6,(i+1),(String)rw.get("email"));
71
wsheet.addCell(label);
72
label = new Label(7,(i+1),(String)rw.get("user_sex"));
73
wsheet.addCell(label);
74
}
75
76
}//結束大循環
77
78
wwb.write();
79
wwb.close();
80
os.close();
81
response.flushBuffer();
82
83
}catch(Exception e)
{
84
System.out.println("生成信息表(Excel格式)時出錯:");
85
e.printStackTrace();
86
}
87
88
return null;
89
}
代碼簡單說明:
1.設定好response的相關屬性:
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition","attachment; filename=\"" + Common.getFileName()+".xls" + "\"");
2.取到response的OutputStream實例,并用這個實例化一個WritableWorkbook對象
OutputStream os = response.getOutputStream();
WritableWorkbook wwb = Workbook.createWorkbook(os);
3.新建一個表
WritableSheet wsheet = wwb.createSheet("members_"+(t+1),t);
4.往表里加行頭
Label label = new Label(0,0,"");
wsheet.addCell(label);
label = new Label(0,0,"會員姓名");
wsheet.addCell(label);
label = new Label(1,0,"卡號");
wsheet.addCell(label);
label = new Label(2,0,"聯系地址");
wsheet.addCell(label);
label = new Label(3,0,"郵編");
wsheet.addCell(label);
label = new Label(4,0,"聯系電話");
wsheet.addCell(label);
label = new Label(5,0,"手機");
wsheet.addCell(label);
label = new Label(6,0,"Email");
wsheet.addCell(label);
label = new Label(7,0,"性別");
wsheet.addCell(label);
5.往表里加數據行
for(int i = 0; i < rs.length(); i++){
Row rw = rs.get(i+base);
//System.out.println((i+1));
label = new Label(0,(i+1),(String)rw.get("user_name") );
wsheet.addCell(label);
label = new Label(1,(i+1),(String)rw.get("card_id"));
wsheet.addCell(label);
label = new Label(2,(i+1),(String)rw.get("user_address"));
wsheet.addCell(label);
label = new Label(3,(i+1),(String)rw.get("postalcode"));
wsheet.addCell(label);
label = new Label(4,(i+1),(String)rw.get("tel_day"));
wsheet.addCell(label);
label = new Label(5,(i+1),(String)rw.get("mobile"));
wsheet.addCell(label);
label = new Label(6,(i+1),(String)rw.get("email"));
wsheet.addCell(label);
label = new Label(7,(i+1),(String)rw.get("user_sex"));
wsheet.addCell(label);
}
6.把生成的excel數據輸出到response的OutputStream
wwb.write();
wwb.close();
os.close();
response.flushBuffer();
7.完成
有什么疑問可以留言,我會盡量幫助。
posted on 2007-09-20 14:47
Vincent.Yu 閱讀(12515)
評論(10) 編輯 收藏