- 在线时间
- 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的使用方法。+ x2 z. [ ~1 G! |
- 8 b4 S\\" w$ t/ u
- 1、环境配置\\" ?3 i$ q3 _\\" {4 B
- 7 D# L, D9 Y! }) N; H/ H
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html6 s$ A1 @/ a' E$ c6 ^! [
- \\" W; l6 r. Y4 k9 @6 Q W
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- 2 x: Y+ V, _+ c* S6 Q) E _% W
- 6 b# `( K/ j% f7 h2 t, j- L
- (1)jxl.jar —— JExcelAPI 函数库;
- 9 J4 W' k% S$ `\\" M1 q }
- . L' P# |# H# R2 c9 l- l5 a1 D
- (2)docs —— 帮助文档;
- * V) T1 {6 O1 i# h- g
- ; Y+ _0 ?+ D/ Z3 w7 i6 n7 W
- (3)src —— 源码文件夹;) P; i/ S: A7 X) m- E& j\\" f
- ; ]\\" s# _' ]# D1 L
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- 0 f0 M* \/ {9 p\\" o% c* Y6 h
- 4 ^: _1 Z: O9 \) Z# f; \
- 2、Excel基础操作实例
- * z8 s/ u6 P1 x- ?
- 1 t( D( Q\\" f3 p/ x* I% j
- (1) 创建Excel文件 - |( A- _# W8 b4 k8 B
- 1 U\\" }1 ~6 `1 n( P( o1 Z
- /**读取Excel文件的内容
- ) u0 ~8 D1 _1 `3 g& m
- * @param file 待读取的文件
- ) _ P& c+ ~+ P9 x! N$ t
- * @return // 生成Excel的类 */& Z, N3 p! c+ D\\" n9 I. I' K }
- package createxls;/ H2 Z T: \- L7 b1 u
- h8 e) y7 x5 W% T* q( \
- import java.io.File;
- 2 A% R9 u- n4 ?) X\\" i9 ]/ r
- ( W3 D- U6 j4 A' M4 i
- import jxl.Workbook; ) {) k8 M, C- O7 S
- import jxl.write.Label;
- ' ?1 J, A5 L$ z! t. q2 F
- import jxl.write.WritableSheet;
- ! d7 u) H- J; L5 T
- import jxl.write.WritableWorkbook; $ w4 n! m) S3 l1 U# L
-
- 8 H' Q\\" J$ ], N5 h( ?
- public class CreateXLS {
- . Y# p% w2 J8 U! \$ l1 y9 F9 v* l( W
- public static void main(String args[]) { , e% `& i2 c$ b S- a* ?
- try {
- ( G/ {+ g) c+ P- `/ t
- // 打开文件
- , A( d% _& Z2 I0 s- b' Y
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- 8 V% `; ^2 @* a! n
- // 生成名为“第一页”的工作表,参数0表示这是第一页 ' k\\" Q& L, A* @0 A: e
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- 3 D! S3 v: G7 F/ _+ v0 ? p& v
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
- g# c0 F6 Q/ o; ~ c4 e! y$ X
- // 以及单元格内容为test ; i; ^% H/ h0 ~' _1 C3 n
- Label label = new Label( 0 , 0 , " test " ); 1 W: f8 \, M, v7 L6 o; L
-
- ' y) h3 J: [4 }* w ?
- // 将定义好的单元格添加到工作表中 ; P8 d6 N1 O% Z! q8 g
- sheet.addCell(label);
- 4 f2 Z3 G! d5 y+ [ b& Q
-
- $ M$ b4 h$ d0 o8 ~( H4 g
- // 写入数据并关闭文件
- - o; s1 Y& F$ |$ N! ? ^
- book.write();
- 6 @1 b( X2 G0 H7 n& G
- book.close(); 9 s, ?8 D& N\\" [' f6 d
-
- ) g( ^* B9 B; J! e
- } catch (Exception e) { \\" T; W6 o* I3 s8 b; a, ~: R
- System.out.println(e);
- \\" k5 Y1 G/ C+ e\\" B0 T$ O; L
- } 6 f: M# C- X' \! o' i% e; R2 Y- s% W
- }
- . D2 w/ h% P/ R3 u* [) H6 g5 F
- }
- 2 P$ N0 q\\" J\\" q3 [6 ?: M6 j
- ! T N5 n( _2 c- M ?% \6 O
- 2 d: @ q/ n' g1 B& i
- ; |1 h9 c, U4 d4 e3 a
- (2)读Excel文件
- - B6 E\\" V- i. b
- 3 ?; \9 z- G S! J$ O' P3 ?+ r
- ! e G4 [, e( b; M7 h6 V
- package readxls;4 J# j& D$ v- i1 L) ?
- . M! ~/ W5 L8 W) e& z Y9 P
- //读取Excel的类
- * B, @* o+ }, o\\" w( r\\" p: v
- import java.io.File; ' u* {5 `# Q6 y0 d0 j) J$ C
- % ?# p+ P3 b+ `6 i4 l* M/ X' y+ i
- import jxl.Cell; # E9 d. k! g! i
- import jxl.Sheet;
- 8 a p' w9 H! L
- import jxl.Workbook; # C2 D& }! F, a
- / u) C/ `) ], T4 u
- public class ReadXLS { 1 _( p1 u' U1 @( k1 L
- public static void main(String args[]) { # a1 t8 D/ G( d- o. P
- try { ) ]' W& z- L1 q* e, o O
- Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
- 1 B U/ |8 }* O& U+ M
- // 获得第一个工作表对象 - @* o2 ]( o+ i% D1 z) @9 [
- Sheet sheet = book.getSheet( 0 ); 2 O, r. v8 G4 q! Y& m' p) n0 u
- // 得到第一列第一行的单元格 ! e' D1 [# d+ s) C% h9 H! @
- Cell cell1 = sheet.getCell( 0 , 0 ); # X0 a% d8 Z1 I7 a8 q8 C' I( c7 q
- String result = cell1.getContents();
- % N% j1 w: u( P
- System.out.println(result);
- 4 ~* j# J# w) k9 H' l
- book.close();
- . [' S( |8 J \! @
- } catch (Exception e) { . L E: V9 \+ u* l: A5 L
- //System.out.println(e); 0 }$ L! r8 z/ k\\" I, Y/ S
- e.printStackTrace();4 Z; v7 F; K! ` E+ p4 U. H; W- Z
- }
- 2 s, ~) J4 @; E( w2 c
- } 6 R7 ^0 {) n8 v: g3 D+ E/ l3 ^
- } J3 q8 Q1 X) @0 Y3 c# J+ }5 w
- # ?5 [% N2 C. E
- 3 `5 ?$ m4 T ^0 R) w& [, I\\" ^\\" \ e
- ! q3 x* J$ M\\" ?/ Y/ I/ W0 K
- ! p1 i\\" `& R0 F/ [: P
- (3)合并单元格、格式化单元格等4 S* P5 ~; {+ c# w
- # i. ^3 x6 F2 T! X' n+ z6 w) q3 e
- ! m# y2 b& [8 [1 j/ Q& }& f
- //合并单元格并在单元格中输入内容- N! ~2 F# C2 `& T6 ^
- + v7 S* p4 _3 u) P
- package additionalproperty;; v\\" m8 {; }: N1 {4 b, K9 j8 L
- % r' {9 }& X- ^+ X# t6 u, j
- import java.io.*;4 D! A3 d8 o& [+ z
- import jxl.write.*;# `6 t* a4 {+ \1 b. k& [0 I
- import jxl.*;) _& i7 C2 Z/ w3 q+ B% B6 a7 o7 U
- 9 ]8 L: Z$ l- F9 \8 _
- public class MergeCells {8 t/ N$ ?. g* `& ~- e
- public static void main(String [] args){) E+ o' ^- V$ |7 k( A8 B$ C
- try{& ^! w. K9 M1 j5 E# Z
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));1 j1 D6 {6 a# O3 R# g0 B/ v9 k
- WritableSheet sheet = book.createSheet("第一页", 0);! R, C$ P7 Q* J
- sheet.mergeCells(3, 3, 6, 6); //合并单元格( C! X8 T& O( O. n% l
- ; g$ e/ c& u/ [ r
- //设置填充内容的格式9 }# R7 B% g, G- d% Z' e
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
- ) j( E/ c% w9 ]2 o$ t
- WritableCellFormat format = new WritableCellFormat(font);5 w* Q, T$ b! q1 i$ z; \7 d2 X
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
- ( J$ h. P, c( @4 E& N
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
- . X6 g) {# j; D' Y2 o\\" w/ ~6 a: a
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式9 L$ F- u+ E, T
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- 3 b5 g7 p& A2 a1 z8 b8 M
- + i' i\\" b- t' [1 X& T; u
- Label label = new Label(3, 3, "合并", format); //添加内容
- 1 a* K, |: S: ]
- sheet.addCell(label);2 Y' M; B- B6 {8 D6 @
- book.write();: s0 d% V# _9 V3 ]' j( w* }1 T
- book.close();$ L2 t5 m! S5 |# { S, H. B8 [
- }//end try9 \1 ` ?0 T& d5 W3 o, Y( H
- catch (Exception e){: c; T) N3 g N% G/ d
- e.printStackTrace();+ v8 ]% F. l# ?& S
- }* g) {2 n\\" I- Z H' Z4 v
- }9 y7 S0 m3 j, c( A- J9 B
- }) U9 Q\\" n q\\" G/ A: c
- 6 i2 V7 o/ ]# ~ _
- & [4 ` u4 Z2 I: _6 Z3 [& \. v
- ' z\\" Q/ M! _, h\\" c5 L
- (4)添加图片) d! M9 x- o3 w9 [+ y7 w$ ` F
- ( W\\" k6 |5 K( u+ ~
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- 7 i/ a- u\\" U# K: r7 U
- , F T: j+ n; J6 e( n2 w
- / c' @1 T. Z% Q\\" J) J; ^4 i
- //在工作表中添加图片
- 9 @* w/ t- T$ K
- & E& e0 v; ^$ q8 C, o
- package handleimage;- Z\\" B5 U4 K: \3 N
- , Q4 p C0 M# J& a$ w2 r
- import java.io.*;
- }1 v, V' C9 ^8 c/ V9 \4 `% L: D
- import jxl.*;7 @; E Z7 h; d0 i0 U# H
- import jxl.write.*;* S5 w7 N( S8 p\\" W# b) D) G
- \\" M% s/ w' j- } g# G7 e
- public class CreateImage {8 T# l: R' `7 U' Q4 _2 ?; {6 p1 Q
- public static void main(String [] args){- P+ z* b+ M3 B6 j, s5 o; s
- try{
- ; b: M! P v6 s' L8 d# |4 w9 n: Q O
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));& ] d7 S$ g4 d4 ~\\" Y2 c* u2 `
- WritableSheet sheet = book.createSheet("第一页", 0);& j7 I+ p. a8 {: O- \8 H& @0 o
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式\\" ?: {2 X6 t8 b) Q, r( }1 R9 e
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));3 R3 z/ d6 u4 X. B
- sheet.addImage(image); //添加图片
- - I' p\\" N) C, o4 g7 a3 o0 W3 ?
- 1 m; w; \- e; D6 [, j% B
- book.write();
- + U- h0 U3 Z+ T2 ^' r* {! W$ f
- book.close();) L2 u% o\\" j# ?# v k) P0 F\\" H
- }//end try\\" s# n\\" X# o8 W/ p+ B
- catch (Exception e){ e.printStackTrace(); }
- # F3 e% Q, _: D8 c$ L1 Z
- }% h% r% u9 D# m% q- ?0 p& ?- w% L
- }
- # ^\\" B$ g6 _ ^
|
zan
|