a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 430|回复: 0

[专业语言] Java认证辅导:java中Excel导入数据库中

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
Java认证辅导:java中Excel导入数据库中  Y+ `+ I6 m) @1 n: i# a
java中Excel导入数据库1 M( V7 e; ?$ h; N/ m: e
1 从Excel文件读取数据表8 e1 t. S! w- D6 A2 |' I: z! b
Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:(完整代码见ExcelReading.java), I) B& ?6 Z# {0 ^% t( J" Z
import java.io.*;
. b1 V' w. k6 L5 {import jxl.*;* @* R- s$ @) F( @! e" k
… … … …
( e3 b9 C% c% b0 Btry
% {' {& i) H, E6 p4 A3 I! ]! P0 R8 w{
7 R5 I# ~( D9 F//构建Workbook对象, 只读Workbook对象
- z. _/ I# c8 |//直接从本地文件创建Workbook
$ n8 B( v* {" O, `//从输入流创建Workbook
/ `2 u: \5 N/ D3 h; HInputStream is = new FileInputStream(sourcefile);) o- q, L9 w% q% e2 Y9 M3 u
jxl.Workbook rwb = Workbook.getWorkbook(is);* N+ q- g3 p9 Y+ B  o
}& z) i8 M" ]: {! B5 K
catch (Exception e)
1 W6 I3 c# t. ?0 v0 Y$ A{! `* Q* L- x0 ^4 T) J
e.printStackTrace();. G5 E, T9 ~  C$ Y7 l7 {0 s
}
) g7 u0 R# p3 Q* g# o! n一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。参考下面的代码片段:
' b' O) C! D" ]: l//获取第一张Sheet表, E4 [) F; T. z7 u; n+ O
Sheet rs = rwb.getSheet(0);
7 }& H% ]; Q9 x. L我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。
4 k+ @6 \" P: ]一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。参考下面的代码片段:! j+ f) l; G5 E$ G
//获取第一行,第一列的值  c& [9 I' n9 k1 u3 {& \
Cell c00 = rs.getCell(0, 0);
2 c/ ~1 G# z! M7 EString strc00 = c00.getContents();, e) c2 [- x# z/ i' f
//获取第一行,第二列的值
" s# [9 H- E" @Cell c10 = rs.getCell(1, 0);) i# {: Z3 e" V7 Z# N: r) Q
String strc10 = c10.getContents();1 L9 x% b( t/ Q1 Z
//获取第二行,第二列的值
4 ]! v: U. y; R! R' m, w1 @3 q$ m  JCell c11 = rs.getCell(1, 1);
. F) U7 c2 Q" c% EString strc11 = c11.getContents();% K. R3 R8 G' ~
System.out.println(“Cell(0, 0)” + “ value : ” + strc00 + “; type : ” + c00.getType());
9 b0 Y1 J4 R; f) ~# f* tSystem.out.println(“Cell(1, 0)” + “ value : ” + strc10 + “; type : ” + c10.getType());
! j: @& F7 J3 e) b3 x8 s" ZSystem.out.println(“Cell(1, 1)” + “ value : ” + strc11 + “; type : ” + c11.getType());
! u  w' t  A  R6 D7 k! v8 L# X如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。示例代码中Cell(0, 0)是文本型,Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。
! c  {# a0 Y2 y* W
9 L6 r+ _" c0 z% v. n+ M; k
3 S  e. P9 F! K$ z7 [如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。参考下面的代码片段:+ I6 J7 N5 Z# X( t5 Q
String strc00 = null;
% t$ B& _2 {; E" Wdouble strc10 = 0.00;! {) g* U, G& Z9 Y% Q
Date strc11 = null;: @: s* O8 ^# a+ S
Cell c00 = rs.getCell(0, 0);
! [1 k' q" G% ECell c10 = rs.getCell(1, 0);7 O) e8 W' n+ j" b6 w  ?4 J
Cell c11 = rs.getCell(1, 1);
( M6 Y1 J& S5 f4 w: z- B, v5 m" s5 eif(c00.getType() == CellType.LABEL): z3 n/ X' S+ ^% i; ]$ f
{( j& Y. u% t3 c# e& b
LabelCell labelc00 = (LabelCell)c00;
: O$ [9 j5 T3 W" I- tstrc00 = labelc00.getString();2 z4 ]9 t! _( @; I/ a5 w- P
}
; a; c% y0 S+ E8 L  Uif(c10.getType() == CellType.NUMBER)* w% i) G  f" v. Y, [  r7 B$ r+ c1 }
{
1 e& K! Q. l* yNmberCell numc10 = (NumberCell)c10;- O7 @& y* O- M2 y% Z  O# [
strc10 = numc10.getValue();9 S0 W) o5 d* @: x  Y& [0 Z
}
/ R3 A4 z/ R2 e8 f- T6 G" pif(c11.getType() == CellType.DATE)5 N- P& Q9 b$ q( V9 _1 A/ _
{7 N1 l" |: B/ U, l9 ]
DateCell datec11 = (DateCell)c11;
) Z: {! I% b' y4 tstrc11 = datec11.getDate();
" d) Q  w2 m0 ^- u& U! B; S" u! k}. ]2 P/ A4 [) u9 i5 P3 J
System.out.println(“Cell(0, 0)” + “ value : ” + strc00 + “; type : ” + c00.getType());3 {7 Q$ _# V, ]: }# ~
System.out.println(“Cell(1, 0)” + “ value : ” + strc10 + “; type : ” + c10.getType());
8 {3 I) O. R* }8 eSystem.out.println(“Cell(1, 1)” + “ value : ” + strc11 + “; type : ” + c11.getType());6 x* g9 {6 g0 \3 |5 V( R! F
在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API提供的基本类型相匹配,强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。API提供了以下基本类型,与Excel的数据格式相对应,如下图所示:
1 D. B% e# ]6 @+ h+ T5 ~每种类型的具体意义,请参见Java Excel API Document。1 x, f2 b7 S( z
当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。参考如下代码片段:
& l2 S& N0 O1 K6 L, O4 f//操作完成时,关闭对象,释放占用的内存空间3 C, x9 d2 `% o6 t, V- ?+ B% o& I, ?
rwb.close();
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-9-27 19:47 , Processed in 0.490040 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表