- 在线时间
- 491 小时
- 最后登录
- 2026-9-17
- 注册时间
- 2013-2-28
- 听众数
- 118
- 收听数
- 46
- 能力
- 268 分
- 体力
- 39229 点
- 威望
- 1340 点
- 阅读权限
- 255
- 积分
- 31234
- 相册
- 2
- 日志
- 0
- 记录
- 0
- 帖子
- 1389
- 主题
- 937
- 精华
- 0
- 分享
- 0
- 好友
- 111
升级   0% TA的每日心情 | 开心 2026-9-17 16:51 |
|---|
签到天数: 265 天 [LV.8]以坛为家I
- 自我介绍
- 内蒙古大学计算机学院
 群组: 2013年数学建模国赛备 |
 - JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。
- ) M. z* L' N+ i/ y! U
- ; d/ X, N7 O5 i& e0 B
- 1、环境配置9 h1 G- A( I' h( m\\" o
- - S, J t( B6 `+ L3 O# a
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html1 m6 N4 H- U( B& m5 a
- 1 \- ]; g# p5 h' D9 _# @
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- . r5 l0 @7 n6 H2 b) n
- 0 t' A, d1 D6 W. }5 N* }
- (1)jxl.jar —— JExcelAPI 函数库;$ q7 N/ \, p! M% N( J
- 7 ~: n6 I8 R7 o# p
- (2)docs —— 帮助文档;
- \\" d- G+ Z1 m; A* Q* H8 c
- # n: `' `; K) p& J
- (3)src —— 源码文件夹;2 @ ?* t9 q4 V/ N; v+ S. l4 V4 e; H
- . E# w9 J) z6 @1 Y, ]$ v7 d2 a6 p, J
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- ; v! h, G; K$ [9 a8 Z1 B. E\\" j
- 9 H. q+ T& U7 o9 Y& k+ C1 |$ U
- 2、Excel基础操作实例
- ; H% [7 _# Y7 e, V, g3 q4 i
- 3 g2 P5 w$ r1 E
- (1) 创建Excel文件
- & k' M* L. d8 u& u
- 4 m$ b5 C' E8 p- i ?
- /**读取Excel文件的内容 3 P r$ i6 r3 G4 q; h3 U$ X# W
- * @param file 待读取的文件 * v) j0 S* o1 y
- * @return // 生成Excel的类 */
- ( K4 p4 `; z) s+ j% S3 w\\" O+ ?
- package createxls;
- , ~. I2 w- }/ P4 }. [3 o
- 5 O$ V$ b\\" }7 Z+ d Y1 D
- import java.io.File;
- ! P) ?/ R' X9 R8 Q' x4 R
-
- ' q* ?2 e/ R( P& \$ s
- import jxl.Workbook; - K% V- P$ T* l9 |* a7 ~5 W
- import jxl.write.Label;
- Z* f7 n0 k, d- t/ R$ Q
- import jxl.write.WritableSheet; ! e( @1 [: v# t0 _: A5 F
- import jxl.write.WritableWorkbook;
- + m C8 Q8 p* \; x, D' T/ E5 \$ k
-
- 4 W0 e% W5 E5 N1 o- W
- public class CreateXLS { ( y# i/ {' O( C* l2 q& F: w8 [/ R# O
- public static void main(String args[]) { 0 p4 a6 E5 m. z# Y
- try { , Z( F, U1 s$ k' k0 r
- // 打开文件
- 4 n6 ~4 Z. Y c# k6 h9 U8 D3 R! j- I
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- ' ~- a5 q' Q4 S% W' b
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- + t$ m( b& T* e7 t& U
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); ! ^$ B# ]* E U% v$ A. }
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) 6 H u8 w0 }4 U+ O8 H
- // 以及单元格内容为test 7 z1 {; ~0 \ s# |) _$ q! f* Q
- Label label = new Label( 0 , 0 , " test " );
- * D4 G4 o$ _ x: r* C- ?
- 5 w7 Q& j+ _2 x: A: q/ V6 M3 F8 j
- // 将定义好的单元格添加到工作表中 & F8 g- m* X# d1 v
- sheet.addCell(label); + k\\" ^( \# J3 [* ]/ e/ h0 e/ S
- }* x4 z& K, u$ e$ |5 t8 W
- // 写入数据并关闭文件
- 9 D: j8 n8 w) l- Q! b' S
- book.write();
- \\" L! n4 M* a0 K\\" z1 e
- book.close(); 7 ~, R. i0 ~: c+ \3 B% F) q- O
- 1 p9 D6 q) I% a E
- } catch (Exception e) {
- * Q, j) K3 b' F2 V- Z
- System.out.println(e); + U3 O& t' x; O& G W2 e, C
- } ) R1 t\\" H& o @0 `) {9 T2 H; i
- }
- 2 N\\" N# c! h: r# l
- } ' ^ z\\" D2 Y* y4 Y# ]' ~
- * r0 }9 R2 k% z7 B
- ! m$ c4 h' g& [& Q\\" L' E\\" z
- / U% f* `0 `# q& ?
- (2)读Excel文件) y5 w8 x4 C4 {- W. x
- 5 l, _/ W3 @4 Y$ k& q$ h& c
- 0 U- F9 E2 U# t; U) K' `# o
- package readxls;0 T6 J. y0 [! e6 Z( E
- ( B* @5 Y4 @$ S9 W
- //读取Excel的类 0 G: e2 `% ~/ ]3 p, o8 g
- import java.io.File; 1 l6 T' f* q\\" o$ ?
-
- ! U# `& A9 P- y; f; M3 p
- import jxl.Cell; 0 {7 T7 G7 ?0 @: {$ R
- import jxl.Sheet; ! c' v J7 ?: x2 B
- import jxl.Workbook; 4 r# ~& f* _- c6 x. r% C
-
- * w7 j: ]7 e8 X+ M3 E2 `2 F$ L% Z
- public class ReadXLS { ! X. f9 P- t3 V3 z
- public static void main(String args[]) {
- + u! q: x; ?+ @6 ^\\" Q. L* Z
- try { 8 D; g% b' e% j% f+ ]! @& A0 M# {
- Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
- ( D C; I! p; \
- // 获得第一个工作表对象 * E+ b$ l' N4 y( o\\" D& U
- Sheet sheet = book.getSheet( 0 );
- ; [% O8 T9 A L/ _( m; M. ]! y
- // 得到第一列第一行的单元格 6 E, i% B' m* ?; I6 l( N
- Cell cell1 = sheet.getCell( 0 , 0 );
- / {5 ^1 T8 p5 f% r8 `
- String result = cell1.getContents(); , c9 c$ ?, Z- r% X% `
- System.out.println(result);
- 9 h/ P- f6 ~) U\\" _' b
- book.close(); 4 R* X* M7 ^* G0 g1 ]
- } catch (Exception e) {
- - j* \; u# E\\" Q; k$ [' p, l
- //System.out.println(e); 6 [; ^: d4 H% d
- e.printStackTrace();
- 3 l# ~& Y; N5 ?' x3 C
- }
- , g/ `0 D& M( z
- } 9 {$ D% X& u2 q3 h- \) ~
- }
- 5 a# J' p4 }/ ~\\" ]$ G8 i
- 3 F5 c' N+ C$ w* x% k# A
- + Q% T/ C; \! J0 m& s* G* c
-
- ' `/ F: P; \7 p& q
- / s; X* | [/ i2 D' v; c! t
- (3)合并单元格、格式化单元格等
- & H' u# d; g n' p3 @& `9 ?
- & c4 {% k- u0 V j; A
- ( ?0 ^7 m5 V8 P4 k
- //合并单元格并在单元格中输入内容
- 5 t) V8 f+ U, c
- ( h0 k# E5 Q) R4 i a
- package additionalproperty;
- & w- W7 n: t1 A# ^( Y$ ~+ Q$ X
- ( i+ L9 |2 ^' P2 e. |8 S+ Y2 k
- import java.io.*;
- : _. v/ C8 w8 k
- import jxl.write.*;4 [ w% U! t h2 L8 _, \# M
- import jxl.*;
- ; l: W\\" b K4 N+ F3 I1 m3 r! T
- # J$ Q, ^' B# U
- public class MergeCells {
- 6 _) {/ B: Z# Y1 _- s2 ?! d4 h9 E
- public static void main(String [] args){
- / k, O1 F9 V\\" w& A, x! q+ p
- try{7 H9 @7 {* I$ C( ~\\" S
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));5 l% m. @9 L3 I* v+ E
- WritableSheet sheet = book.createSheet("第一页", 0);
- Y3 T$ U' M1 b/ j8 N9 \) |2 ^
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- ) h- O, v3 @- m5 c2 Q
-
- , E N1 Q% V5 T) n9 z! V+ a- d2 O
- //设置填充内容的格式, L( H G j! H7 P8 y0 |
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);8 a. i3 {/ ~4 c, D t. s. l( D2 a
- WritableCellFormat format = new WritableCellFormat(font);1 k\\" I7 p' X$ l* u' |* g
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中: l1 }- P) j- K0 T; q
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中3 Y' y# w% |# z. ]3 r2 J! j
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式$ I6 g9 k9 a: d9 `% ` J
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- * b; S; w4 b\\" B6 l' q
- % i. |7 E\\" T* A' ?3 C
- Label label = new Label(3, 3, "合并", format); //添加内容
- # C( H# E9 ~- b2 n
- sheet.addCell(label);
- ' o. ~. S/ J5 M7 _( G0 l8 T
- book.write();
- ; l% H: i+ U4 d
- book.close();
- \\" S% M7 G2 W( {2 R0 x
- }//end try
- 6 t2 P\\" c% m' O3 y0 d) S
- catch (Exception e){9 I9 h1 F3 C; I
- e.printStackTrace();
- ) Q3 Y! l# J2 Y1 f8 k
- }
- 9 S6 k$ k/ O6 A7 k6 _! ]
- }% B% C0 f( s9 K+ f2 r8 ^1 q1 @
- }. ]2 u1 b& _2 j( f% S8 i1 o. V. j
- % E# ]+ L$ @\\" X5 T: Q
-
- ) ` m$ s- F1 X7 j. C
- ; w9 p3 d- ~+ J+ X0 P' t
- (4)添加图片
- - d+ T8 |9 y# F O- T1 L
- , o! _, }4 ]4 d
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- 5 ]8 q* P4 P! ?0 L8 q1 A
- 3 l; `( b+ `' g) \( v
- 8 j\\" {3 N5 ]0 {/ }& Z! Z
- //在工作表中添加图片: d/ r$ ?; g \. S% p+ f\\" b* C
- 5 {3 p7 I+ H# K
- package handleimage;
- 3 j* R v5 Q* C+ x9 }9 ~7 n
- 0 B, M H- p$ y6 W
- import java.io.*;
- 3 c5 ~; v ?! [1 Y& @
- import jxl.*;7 b) G& l7 G7 |/ Q! S- X
- import jxl.write.*;; o# _1 E& D) }+ p& `: Q8 r/ V
- 3 x3 a\\" v. ^0 v/ b
- public class CreateImage {
- 3 v# B3 J8 {\\" A8 Z. ?
- public static void main(String [] args){ R; U- `) g9 g9 T' U0 U4 m. s
- try{
- - d2 `$ I+ b\\" Y0 o0 [' @
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- % D1 o6 s; ~5 s# p: ^, s
- WritableSheet sheet = book.createSheet("第一页", 0);\\" i\\" J6 j# h& t; Y: Y0 T
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式; _/ t( @1 |! S% c+ {+ r
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- 3 q5 g/ X2 C2 t% A( M2 J9 P
- sheet.addImage(image); //添加图片
- 4 e. R3 R: E- I
-
- , b8 Y% R# \9 c
- book.write();- b+ H) _9 o& C
- book.close();
- ' m. v: g1 U) ~- w* q+ z! x
- }//end try; T! c\\" C* X; m
- catch (Exception e){ e.printStackTrace(); }
- / {2 T5 l; w# T( l- t
- }- u0 M4 |- L- y/ v- d
- }; E\\" Y% ?& ~! K9 p9 A1 x5 k3 y
|
zan
|