- 在线时间
- 490 小时
- 最后登录
- 2024-2-3
- 注册时间
- 2013-2-28
- 听众数
- 117
- 收听数
- 46
- 能力
- 268 分
- 体力
- 39235 点
- 威望
- 1340 点
- 阅读权限
- 255
- 积分
- 31237
- 相册
- 2
- 日志
- 0
- 记录
- 0
- 帖子
- 1388
- 主题
- 937
- 精华
- 0
- 分享
- 0
- 好友
- 111
升级   0% TA的每日心情 | 衰 2020-10-25 11:55 |
|---|
签到天数: 264 天 [LV.8]以坛为家I
- 自我介绍
- 内蒙古大学计算机学院
 群组: 2013年数学建模国赛备 |
 - JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。: M: z2 Q# ?# l4 c4 P5 K! S! W
- ( H1 X6 T9 X8 R% V+ [& B. m
- 1、环境配置5 A& J: e' m' M% H f# x5 |' Y
- * P: J7 H% n, W) x
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html: T6 s3 V# x! f( X* q) I% Q( e
- 8 T\\" \2 L8 B! `) u* P
- 下载完成的包解压之后,可以得到如下几个重要的文件:! G% w/ J\\" u; n/ n x\\" H
- 4 a7 b3 H) S% Y6 m' j! @
- (1)jxl.jar —— JExcelAPI 函数库;$ J\\" u0 J) L( T
- \\" F! q0 g. o2 T
- (2)docs —— 帮助文档;% D) _! J/ C) x& y
- ! @$ `: {3 O4 f, t8 n
- (3)src —— 源码文件夹;
- 6 {6 [6 d7 b\\" R4 G- f
- 0 n* h- y' M\\" T( f# F- u3 o
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- & h. Z/ B* F! D+ W9 H! w1 D
- ( b- @\\" C8 r' x! o1 V\\" b& q2 \
- 2、Excel基础操作实例
- 6 {! @1 h. n1 E8 {. m6 h) Q
- 0 u* D: D2 o! r% X8 @! m
- (1) 创建Excel文件
- $ s a0 K8 q; U0 N
- 2 C: r0 b; }- t! ]
- /**读取Excel文件的内容 ! ^# W6 r/ P, K4 e0 c, T0 }1 _
- * @param file 待读取的文件
- 3 `: }0 e0 r: B8 O
- * @return // 生成Excel的类 *// v' w0 z* v4 G
- package createxls;
- ( M+ p0 x' R( P) ]+ w
- . @# |. U/ w3 `' A! ?3 H\\" P
- import java.io.File;
- & ^- E+ C' n6 [* u y( Y: r! j( D
- 3 A; ]! o/ x: k
- import jxl.Workbook; 4 _( c' T& ^- k% n9 X( Z s( u
- import jxl.write.Label; \\" T& u1 D; E y5 _; i\\" y6 W
- import jxl.write.WritableSheet; * E: \! G9 \0 f/ |3 a- c: R' t$ q
- import jxl.write.WritableWorkbook;
- 9 ]6 Z+ t; u9 a
- * E7 M$ `+ X; o y- m6 C9 O
- public class CreateXLS {
- ; c5 R m* o) x5 l2 F7 V
- public static void main(String args[]) { # h/ K3 t- v( a. q; r2 x$ G2 D
- try {
- * Y( i0 e5 S; t5 g, F* j4 J3 W0 F
- // 打开文件 ' T1 E2 b- ]( p0 a# ?7 y
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- + J6 V9 ~8 P0 Q6 Q2 A: q3 U9 P3 d
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- $ S- b7 H& f8 D7 ?: ?. E
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- 0 W3 u' k5 F\\" o, s/ E
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
- \\" h: a% r! J: q( {% @! `. u; v
- // 以及单元格内容为test Y6 @# V\\" |# C6 `
- Label label = new Label( 0 , 0 , " test " );
- 9 Q |0 X' v9 L. {+ `$ F( l
-
- ; {\\" a2 Y7 Y2 N: Q4 {6 b. j6 f
- // 将定义好的单元格添加到工作表中 6 V\\" Y# S+ i9 S' u- u1 T\\" A
- sheet.addCell(label);
- . ^- k\\" z7 a, o: m2 m9 \( Q/ W
-
- 9 ? P3 z1 `3 t% m' Y, h+ ?
- // 写入数据并关闭文件
- : g! W\\" x. s4 O1 W
- book.write();
- 6 H1 h1 n& S9 G3 u6 ~5 s: N
- book.close(); 3 ^. m; o$ u! P6 f
-
- 0 V8 L4 w' K( N0 T\\" n9 g/ M
- } catch (Exception e) {
- % u$ R4 F- M/ F+ Q5 L6 ]2 t9 o W, z+ {9 }7 w
- System.out.println(e);
- ; R9 k; o- F% ?3 k( W
- }
- d3 D0 Z& X0 n+ `\\" h
- } 0 H3 I$ @+ W' _: C+ f4 j
- }
- 4 p( x$ v1 M& w4 j2 |
- - p! C\\" l0 l$ F' g
- 2 l/ s5 A- X3 u' C3 F
- 2 D6 i8 ]2 v: G' F# a V
- (2)读Excel文件
- - Q\\" z. f, t$ p) i- F
- + x- b' g' u* D# \) i
- + u; d6 F; N. k% @
- package readxls;2 ]* Y2 F3 w3 q l% C
- ) {# A. o% e\\" R' l# y! M
- //读取Excel的类
- $ W7 @\\" ` _- Z7 ~! S
- import java.io.File; ! U$ E( u+ i- Q: R5 f Q+ F
-
- $ z2 y4 Y( d\\" Q. o* x
- import jxl.Cell;
- - c& ^7 t. x8 C5 L. P$ X. i0 X) t7 U* Z
- import jxl.Sheet; 0 e1 i$ w) [2 b6 Q
- import jxl.Workbook;
- ! M4 ]: ~3 u( o: X+ J
- 9 _! g: t& X: m- m' M5 a* t
- public class ReadXLS {
- + e* {% o3 i7 [1 } A6 ?
- public static void main(String args[]) {
- 8 o6 N& G0 J h7 D
- try { ; ^\\" V: [+ W+ |1 R% w
- Workbook book = Workbook.getWorkbook( new File( " test.xls " )); 1 W6 n4 o* B( S4 m
- // 获得第一个工作表对象 2 c7 p3 X( M( E/ X& k1 T
- Sheet sheet = book.getSheet( 0 ); * q4 g) G3 Q$ m* X5 x
- // 得到第一列第一行的单元格 1 Q7 O$ I$ `* u& l- x9 K( _4 U
- Cell cell1 = sheet.getCell( 0 , 0 ); f# ~& g, V0 G
- String result = cell1.getContents();
- $ i& p) v( N( j1 A/ S: }
- System.out.println(result);
- % b9 B( h7 K$ Q4 Z. Q& b5 K
- book.close(); 8 o& q# l& c: |/ ?( W+ j% I
- } catch (Exception e) { . I* V+ x, K' c% o
- //System.out.println(e); ; P. Y& K3 b' ?& ]* h
- e.printStackTrace();
- & D, y' I\\" i- b/ _; L: j
- } 9 c6 e8 Q/ \% W5 Z
- } $ @9 B7 q( A3 z
- }- Z7 \5 u& w0 p' W- H
- ; m- u9 f. P0 N( \! ]! l, t4 D
- 2 W! z; g$ m% a& U
-
- ( ~- @( G% Y3 [4 S! _7 y
- # {$ J) O1 @/ } \
- (3)合并单元格、格式化单元格等7 [ ?& Y+ I3 I- d& y4 n L
- - n+ a! i( K% s! h0 M
- 2 n+ E- d& x/ S8 h, {/ u. B. p4 w
- //合并单元格并在单元格中输入内容
- % d7 v4 V; Y* q7 L: M9 |( L( W
- 9 b! S' r7 h I) Y
- package additionalproperty;
- 7 g; s/ n- ~; `# W+ D8 P+ u% D
- ! Q% Q G6 H. d/ y4 H% T8 Q
- import java.io.*;
- ) H8 |. M9 n# w3 x, Y7 W: K/ u
- import jxl.write.*;
- \\" Y) x: d\\" O. @8 z7 F
- import jxl.*;
- $ a4 M: ?, U5 _\\" c V
- \\" C) [& G, d! B) l! c
- public class MergeCells {
- 4 K9 ]: C) o2 P$ `/ O- \% g
- public static void main(String [] args){3 O0 y, H! ?% ]* o. q9 [+ }
- try{8 ?6 d5 ]8 n/ w\\" d+ x* d L( }
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- ! f5 G1 q: _1 H* S6 q( w$ `
- WritableSheet sheet = book.createSheet("第一页", 0);, A; u( K0 w' V2 ^5 Z
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- - e0 R$ B5 s' V+ @; e2 g
- 3 d# u/ z: I4 k2 u
- //设置填充内容的格式
- , N( D, C* s! J3 i' h6 Y
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
- * G+ s- T7 ~& z9 F# ~
- WritableCellFormat format = new WritableCellFormat(font);\\" c9 ^: L1 q1 c4 l+ E
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中/ _3 G9 Y1 h+ j* P5 C4 W8 n {5 V
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中9 M& T, K# ?2 n\\" T) j
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
- - }( P$ W2 J1 R# O6 J
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式4 f7 x3 k% y4 b+ I; m; ?
-
- ( F- {! ]. j- a [0 V
- Label label = new Label(3, 3, "合并", format); //添加内容
- ( h3 t& D& Y* {1 x2 R j
- sheet.addCell(label);' y6 @& o. x( p* X2 V7 n
- book.write();
- ) Q2 z2 w' i: S K# I3 D
- book.close();! l% g: y1 H6 w: k
- }//end try
- ; h5 i( u0 {. C' ]5 [& T$ s\\" W# V
- catch (Exception e){
- % D6 }% z# R\\" X) r b. F# T
- e.printStackTrace();
- , Q: {2 |) F& j1 d0 ]7 V) G
- }$ C: ` K: p+ _2 k
- }6 {; R9 P- z2 W) S+ R\\" R\\" ]6 C! `1 u
- }
- p* a4 h6 a8 B2 I\\" C2 D
- , k% J+ n3 X6 L, Y5 N+ B. A) f# A
-
- 5 m% s% X3 d# r) k% c5 @\\" p
- \\" q, I6 B/ [) z6 U I\\" z( s2 i
- (4)添加图片) I: z' B: S7 r5 k
- ) d Y8 D8 X u# R' r, w( N; B
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- ! u Y5 h' m# o% s p2 v. w2 }' S
- . g7 h: F9 q# b E% d1 F$ ]
- : ~0 I. S5 o' r3 `
- //在工作表中添加图片
- ) N Y; c0 K9 l
- + n; e* z9 H3 U7 n! }
- package handleimage;
- 8 {: o8 H) x$ Y5 H8 m' D& X
- * Q$ X& H4 N* R$ z5 `; V. J# Q
- import java.io.*;
- V) {* L8 |: S
- import jxl.*;
- 9 D\\" ?9 [4 e5 ^: ^\\" }2 V6 F7 m! L# B
- import jxl.write.*;
- 8 {7 ~: U* L, {0 V
- ; d0 W: `* ~ h% F\\" c
- public class CreateImage {
- ' K7 m* n0 d& _( a
- public static void main(String [] args){
- 1 g3 `, A1 D2 m' B# ]4 B q+ B
- try{! T- A4 H8 O\\" N3 B( Q, d$ p8 R J
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));: p+ V# w9 m! K4 C) w
- WritableSheet sheet = book.createSheet("第一页", 0);
- & @9 f7 m, e7 R4 ]6 M
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
- 6 [\\" |* U$ y- y' n1 s2 ^% H2 y( ~
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- \\" b+ e2 _ V) ^& v3 o {
- sheet.addImage(image); //添加图片
- + N7 \1 ^\\" {\\" [! c9 H! ~
-
- 8 c1 R) F& J E, W& L: w
- book.write();
- ! M5 A1 l7 x, m2 X( ?+ m
- book.close();) e4 n' V6 Q% p; x
- }//end try
- 9 {) a% @; l0 e! H: c\\" @
- catch (Exception e){ e.printStackTrace(); }
- 3 f1 _& R. m\\" J# Y3 O( V3 X
- }
- / E9 n' E; j\\" p3 o& d) `% T- U
- }( e5 @/ b4 `7 _
|
zan
|