a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 384|回复: 0

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

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
Java认证辅导:java中Excel导入数据库中$ g4 i' X9 g+ [
java中Excel导入数据库
2 y, t, Y' z/ \+ G0 V1 从Excel文件读取数据表+ L% s9 X* E; O5 G" [
Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:(完整代码见ExcelReading.java)
' M  H% A& Y7 L3 ~( F% yimport java.io.*;* [5 A( Z# @+ [/ g) I: V
import jxl.*;# v6 s# ^, m6 \+ c. b- {
… … … …2 v7 A3 k8 K, S, Y
try! Z3 Q/ I% M( X+ G! k8 O1 d
{7 j. `% I6 ]8 e) W& J  O* Q7 o
//构建Workbook对象, 只读Workbook对象
5 V' D3 T  @0 O  z! B& p3 g//直接从本地文件创建Workbook
  i8 h- j. K0 d2 ^& @//从输入流创建Workbook$ a2 S+ @: [- U( d+ `4 q
InputStream is = new FileInputStream(sourcefile);; D2 L6 T( s% i: f$ i$ o4 a/ [
jxl.Workbook rwb = Workbook.getWorkbook(is);7 [- w9 _, O8 _& k
}" ^: y! e# @) A/ h4 W0 o4 W9 H  L
catch (Exception e)/ ?* G0 I# h7 x
{
9 }+ C" b5 r! Ve.printStackTrace();
/ I8 Y8 P! R; ^. i1 l+ c8 G/ J# U/ S}$ V- L' J3 H. t, V
一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。参考下面的代码片段:) D3 U7 T5 s0 i& |. Y3 K
//获取第一张Sheet表
  f% K* t3 P, y/ vSheet rs = rwb.getSheet(0);
* r5 i, W) K9 F. h# Z8 o我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。
0 J7 D+ P+ _+ I$ l( T一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。参考下面的代码片段:
  z& Z7 K; x& ]! |) z5 i8 m//获取第一行,第一列的值
1 ~* w) h5 R# c  i, fCell c00 = rs.getCell(0, 0);* f2 M- y, b7 \* Z0 v: N% n
String strc00 = c00.getContents();
& E5 K% j: o9 X//获取第一行,第二列的值- m; @( z% c" G2 B) o- e, q1 k
Cell c10 = rs.getCell(1, 0);- ~% N1 [6 z0 k# I- Y; |+ Q2 y
String strc10 = c10.getContents();9 P5 |( f, a8 X4 a/ c
//获取第二行,第二列的值
" X- F0 @+ A- GCell c11 = rs.getCell(1, 1);
/ \- L! Y; I, ^) j9 U' ]+ V5 v6 YString strc11 = c11.getContents();: n3 u/ j" @: q6 G
System.out.println(“Cell(0, 0)” + “ value : ” + strc00 + “; type : ” + c00.getType());5 |* U0 t0 k  V- w
System.out.println(“Cell(1, 0)” + “ value : ” + strc10 + “; type : ” + c10.getType());# s2 b* ^$ A5 u3 |: j  R% q
System.out.println(“Cell(1, 1)” + “ value : ” + strc11 + “; type : ” + c11.getType());  T7 a# r( H+ [
如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。示例代码中Cell(0, 0)是文本型,Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。5 O' j! g2 B# V$ I& X6 p
7 {3 ^" w+ f" W, S  l5 y2 T

: }3 s# t! i$ o9 \- r如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。参考下面的代码片段:
/ ]4 Z) _5 A- d5 j7 lString strc00 = null;: Q6 G8 {, I1 Y3 ?
double strc10 = 0.00;
! Y) [2 G& I: w4 xDate strc11 = null;! k. k3 t, c8 K; W  D) E
Cell c00 = rs.getCell(0, 0);
8 M, @' _/ |; O; E2 @3 S9 YCell c10 = rs.getCell(1, 0);
1 d' n! F  C0 E" L1 MCell c11 = rs.getCell(1, 1);! y( p! D* A" ~. a5 A+ E
if(c00.getType() == CellType.LABEL)* |' I3 [7 M4 V- r) T6 t4 J. d
{
+ `3 k3 m( \5 n3 J8 l/ `) M9 @8 lLabelCell labelc00 = (LabelCell)c00;
' l7 |6 U. V# Z: H% ]+ Wstrc00 = labelc00.getString();& ?& I. P! G8 |( n
}
  O9 B* t+ \. o1 z" xif(c10.getType() == CellType.NUMBER)
4 U9 v4 R5 `5 @' G8 K: Z( t" Y{. V0 c3 O. a: U7 d: }, m1 c8 C
NmberCell numc10 = (NumberCell)c10;* m" ^6 T, L) ~0 f! G
strc10 = numc10.getValue();
  C) t) M2 ^% z( w$ k  I}
9 H7 g+ I+ u  u1 e4 Kif(c11.getType() == CellType.DATE)
. R% A% o; g5 M: L- _2 T. v6 a{; B, C7 F' d( M8 f- k
DateCell datec11 = (DateCell)c11;
; `2 B8 ]4 D8 w: w1 s  S! Pstrc11 = datec11.getDate();8 V# L  o6 ]: |/ L1 a
}4 O. N, h; j" s0 G" a! j3 U8 Y
System.out.println(“Cell(0, 0)” + “ value : ” + strc00 + “; type : ” + c00.getType());1 ^% f  [" z  w% R3 G; i
System.out.println(“Cell(1, 0)” + “ value : ” + strc10 + “; type : ” + c10.getType());5 G0 R2 X  P+ V2 g- ]! h) g
System.out.println(“Cell(1, 1)” + “ value : ” + strc11 + “; type : ” + c11.getType());$ o: z. ~/ r0 H* w' S
在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API提供的基本类型相匹配,强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。API提供了以下基本类型,与Excel的数据格式相对应,如下图所示:  w$ f, p3 F% h- I
每种类型的具体意义,请参见Java Excel API Document。: n: u) b" i6 J8 j
当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。参考如下代码片段:
% Z) L, X) B+ b5 K. j9 L" q//操作完成时,关闭对象,释放占用的内存空间) l' t) l& ]! o* d0 l! W
rwb.close();
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 15:05 , Processed in 0.206634 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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