- 在线时间
- 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的使用方法。6 }9 z, U& b; s4 P% t
- 6 E( \\\" w4 h* n4 |: G\\" C% i/ s: d0 \
- 1、环境配置
- 9 N# X, M _7 O
- 0 r+ L& w3 u, W2 k5 Y0 t1 @
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html- ]! a6 `9 D9 S& x\\" N1 R
- 2 m, \; e U6 x7 G g- y
- 下载完成的包解压之后,可以得到如下几个重要的文件:; D) b4 R ^3 H6 z% q, E% h
- 7 @# }- r1 D# C0 {2 w9 I
- (1)jxl.jar —— JExcelAPI 函数库;
- 1 o, w# x$ m5 P2 V
- 1 f& u& g0 O8 K1 z2 b2 }
- (2)docs —— 帮助文档;' m\\" _( z( a0 n\\" y) `
- ! B. }* M. @9 I% I- `1 x9 b
- (3)src —— 源码文件夹;
- ; [/ D2 W+ {5 ^* p. ]
- . k6 o% v2 P m: [
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- / [2 d7 E/ N, g3 N
- 3 C$ l* K9 V9 I$ g, A
- 2、Excel基础操作实例
- & p+ E8 l5 V$ _\\" w% C2 |
- v) u$ p9 @$ k$ d* b6 ?0 l0 L) W
- (1) 创建Excel文件 2 R3 l5 Q1 s g' m) m6 S9 X7 B
- - V5 c\\" J, c% I4 |# G+ w6 h
- /**读取Excel文件的内容
- ( A0 U6 f0 S- o' p Y; {+ _) Z
- * @param file 待读取的文件
- + E: E, w/ c0 J
- * @return // 生成Excel的类 */
- , a+ e( y# P7 B+ r H+ U4 @# ^
- package createxls;$ \4 D\\" V- n\\" s: \2 j. n# w5 r
- 5 ~7 e+ y9 Y/ r
- import java.io.File;
- ( [- T: e' S6 n/ W1 F
- ( v\\" ?% y; w7 L; @; d6 g F\\" n3 ^
- import jxl.Workbook;
- ! `: B& T7 x4 s/ l* h6 C
- import jxl.write.Label;
- & }: n9 {% Q7 \5 K9 B. z8 \
- import jxl.write.WritableSheet;
- 1 B$ \* U/ o, Z3 e# v, z# X
- import jxl.write.WritableWorkbook; 6 O' F# N- t+ P: Q
-
- ( r, o4 i5 O# C3 d* j
- public class CreateXLS {
- \\" P/ M2 W7 R0 X }
- public static void main(String args[]) { ; E. Y t\\" R2 U* o+ ?3 O4 ?
- try {
- . T/ U' e: i2 j7 f0 q
- // 打开文件
- * _% f0 M\\" I0 p+ ~% e) |
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); [/ A; `- t% U\\" N
- // 生成名为“第一页”的工作表,参数0表示这是第一页 ' f& N\\" n: {* M, r+ K4 Y
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- $ }+ ~7 s% G: i\\" d% W- j# d9 [9 E\\" s
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) 4 U# r\\" G3 Q) {' V
- // 以及单元格内容为test
- 6 j. {+ b, M6 n
- Label label = new Label( 0 , 0 , " test " );
- ( ]4 ~& h1 U8 K2 Q5 z6 g( f$ k# {
-
- ; l& Y% h: m% A! `# J* r
- // 将定义好的单元格添加到工作表中 * s+ }) t6 v, N) @0 ~9 U+ C! [
- sheet.addCell(label);
- \\" {# T' q$ b3 c s, _* ^
-
- \\" }2 U L% r+ }
- // 写入数据并关闭文件
- . L4 A8 v/ W M2 [2 v! |; v% J$ p$ k
- book.write();
- : L- p5 x n8 u
- book.close(); * e5 @7 j7 H- T. T6 K. H
- 7 D- l- K/ @* d3 P0 g
- } catch (Exception e) { 3 c$ M7 f7 N6 X$ E* M' U8 u$ C
- System.out.println(e); Q- O6 x% q2 ~% m! E r- Y) T
- } . t1 h2 L; H0 @
- }
- # F) b/ }6 E( [4 C0 |
- } \\" F7 V) X, s1 r- X. W
- 1 y, y, C+ M( l% ]2 N$ u+ T, d
-
- 2 \9 M1 d) L$ b\\" N
- 1 W: P% [- c, G! ^2 {3 I$ ~
- (2)读Excel文件
- ) z! z! ~4 }6 H% h c# I4 d
- ( y, ?, c! N) s$ a* S5 c% I0 D
- 0 O- O Y ?% u\\" p8 N8 R
- package readxls;
- ( O( d7 j0 J3 S& y- ?
- 2 u# u8 b* h% ~7 Q. L: q2 Z
- //读取Excel的类
- \\" N$ o( R8 e1 Q7 i8 G+ W
- import java.io.File;
- 7 x) o# \1 G# E. y
- - ^- B- u. Z' P8 ^! V' n' [# ~/ J9 d\\" z
- import jxl.Cell;
- 7 c. { ]' K9 r/ P7 A# t
- import jxl.Sheet; 4 R: z3 S9 p3 Z
- import jxl.Workbook; ; d% Y2 C$ H/ ^( d# ^4 Z m7 N
- # @% j/ P& c! }
- public class ReadXLS { / [4 O3 Y3 o5 U' g
- public static void main(String args[]) { 2 b Q7 M H7 C) _4 X
- try { % v1 R# m7 p$ ]# q0 h. Q: Q& y$ d
- Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
- : D+ n& u* y: K+ x& f/ V
- // 获得第一个工作表对象
- 7 I( Q& l) E\\" w
- Sheet sheet = book.getSheet( 0 );
- v+ t7 C8 j [3 [
- // 得到第一列第一行的单元格
- , o8 ~7 r- j7 c2 a+ Z n7 j
- Cell cell1 = sheet.getCell( 0 , 0 ); 3 ?( [/ o: w+ v* D
- String result = cell1.getContents(); ; R( ?* B0 j: v# F+ ~( ]
- System.out.println(result); 1 R, |& C4 Z3 I0 V\\" M\\" c
- book.close(); 6 @0 B' H7 {\\" @' I( Q# c
- } catch (Exception e) { 2 M/ t! F5 j. F9 s
- //System.out.println(e);
- . f' S/ o6 ~, l- ?: i1 V2 n
- e.printStackTrace();) q! i$ F: p/ C2 L' ~
- } * F F* f( M4 q3 \* y; k\\" n# {
- }
- 6 |+ Z2 u+ V( C0 K+ H) W
- }
- ( |* k( n1 s) s2 J
- 2 d$ }5 H2 w9 b( F
- ) m; G! o6 d* x\\" `3 M
- 0 J: L! e6 i: X! ~
- * {2 C$ l O! X/ y! V; _& |/ c( A
- (3)合并单元格、格式化单元格等
- : N\\" l3 t/ \! a0 w- z8 G3 a
- & X8 ?0 F9 l$ ]5 P( U% t/ p
- ; z, X- ?2 O2 R. D) `0 |, L7 x5 z
- //合并单元格并在单元格中输入内容8 l# H8 c6 h\\" {9 g$ `7 }
- 3 s2 N; c\\" v5 e
- package additionalproperty;
- + ?! _+ A( Y* F
- 8 B% w# U6 c8 n5 C6 p+ a* b
- import java.io.*;
- 4 N, w! }' Q: D. Y8 y- F8 q
- import jxl.write.*;
- 9 h r% d9 G: ]\\" w; \& ^5 ^3 y
- import jxl.*;' h7 T& e S5 _6 d
- : z8 Y% w. C$ {# ?! u. w6 p/ c0 g
- public class MergeCells {$ v- ]- S( ~- R* ^2 D- f% h
- public static void main(String [] args){: s- w\\" r3 E1 b. p/ u3 x
- try{2 ]% x/ ?! W3 l2 T) T% x* {& H
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- 2 h8 W0 q$ i5 |
- WritableSheet sheet = book.createSheet("第一页", 0);
- ) n' S) O. l% P& t! p: j
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- ) O! R, t3 U! A+ m
- \\" L, N4 f: g% V( m0 z
- //设置填充内容的格式
- # P9 C$ B\\" c/ k1 L3 o) \) u: ]+ k
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
- \\" U7 t, |) D9 p, K# E6 I
- WritableCellFormat format = new WritableCellFormat(font);6 s( y\\" K5 o& H$ K
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中& V# t. O' G$ `
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中- _) `5 l0 R/ f- ~0 a\\" x9 U
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式* Q( m5 p4 I: s2 Y; D/ c
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- + ~. i6 E& u- e/ P8 ~\\" i; M' u
-
- x m ^5 ~0 V# p
- Label label = new Label(3, 3, "合并", format); //添加内容
- 7 J8 ^ m1 \- e& H+ Z, J
- sheet.addCell(label);
- \\" a, U7 t: ~+ w; |, c4 O
- book.write();
- ( U! Z8 y3 |( H; l
- book.close();
- . i) l6 d6 z+ ~, W6 q& w
- }//end try* ~) q9 \( I3 t! u& t# J\\" A; k
- catch (Exception e){: y6 ?9 J0 g- S$ p/ ~4 E* d
- e.printStackTrace();
- 7 P% S# Q) I r$ r- u) \ I
- }
- 7 [7 [\\" e4 ~- f( Q- l, q% H% `, k7 c
- }
- 5 t2 E, p# o$ P) p/ ~' s( p& s( |+ D
- }
- w6 z: F- ~3 J+ e, F
- 0 ?2 ~: K5 W' |9 z% P
- * r2 K' J4 k! z0 D
- ( G8 N! t& x) d
- (4)添加图片+ G6 b0 a0 |, X, v; ^' Q
- ' y3 Y6 A4 Z% ~$ U; b
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- # P& Y1 U/ L, `8 p) N3 x
- 5 ^( U6 B8 L3 A0 y
- 8 Q* V0 i5 h9 V/ I7 i8 n
- //在工作表中添加图片5 r; b$ Y; S; t
- \\" {5 A0 @% }0 x: {4 I
- package handleimage;
- # ^* x# y) Z' m, z! G
- 7 G! ?; X2 K) [. s$ q' f% i* o
- import java.io.*;
- 0 M1 p. `* {5 Q% B3 f
- import jxl.*;
- 9 R. J0 O- d/ E* k0 {\\" b
- import jxl.write.*;3 E9 q4 @7 J) }' ?: d# [; Q5 D: U
- # z\\" V- u# j! F& k$ p6 R
- public class CreateImage {
- 5 q( @9 u6 P3 a0 z* O
- public static void main(String [] args){
- 3 B- [0 l: Q$ w8 U
- try{
- ' z7 |1 e1 w- J3 t/ }6 W
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));8 o$ d) \# r, {
- WritableSheet sheet = book.createSheet("第一页", 0);
- ' H4 q: C1 A$ V% [% z
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
- 9 \% ]) G. K9 J# U/ k! t' }- m
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- # b% F- `0 ~\\" Y: H3 C) Y
- sheet.addImage(image); //添加图片
- e/ w5 X7 K5 {4 @' n
-
- $ p4 C6 f( d6 h
- book.write();$ W6 F% ~* r3 S4 w, Q u3 a
- book.close();! K0 W9 s3 ?7 E. E# V. T9 y
- }//end try% B B% o% P7 R; G
- catch (Exception e){ e.printStackTrace(); }: }5 H& i5 `, R\\" I2 h0 b
- }
- 9 F8 e: j+ h\\" E
- }
- + q4 v' K3 T4 M2 I
|
zan
|