- 在线时间
- 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的使用方法。
- 1 T( k; Y( F9 I9 |0 {: o
- 4 b l% I) J+ H: M2 S G
- 1、环境配置5 R# a/ Z0 G' I' G- ~: J
- 8 p5 _ G: f( a9 K% {: H$ C
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- 3 \( j\\" R3 Y$ x* B' H: }
- : J) ]3 B8 e& s6 X# U/ g8 F
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- 4 k5 h* v\\" d6 T) |
- 1 B( T; w$ I! r# }
- (1)jxl.jar —— JExcelAPI 函数库;2 [3 K\\" ]\\" Z0 n' _& }
- - p0 W9 F! A; ]# e. ?4 l+ v: E7 y
- (2)docs —— 帮助文档;, B\\" c0 L7 m# @
- Q, K% Z3 |. v e+ y9 H% w$ k
- (3)src —— 源码文件夹;4 E+ L\\" O0 `/ o\\" r
- ' z/ ^! J( G0 |7 |
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- % h2 ~' D9 J# F5 D- G) i
- ! W: y& d1 X- v\\" w% f, G9 E
- 2、Excel基础操作实例
- / l% D2 B( { v( P
- 8 l; w4 c, F/ V6 }% Z& f6 E
- (1) 创建Excel文件
- 6 q) k& p, g; L0 t: e W$ S/ M; J
- 7 f\\" }* I- M+ W/ ]& H0 j
- /**读取Excel文件的内容
- g0 ~1 e\\" i1 x: L8 y: }
- * @param file 待读取的文件 6 Y5 G3 a9 c; e8 A& ~4 f
- * @return // 生成Excel的类 */; l& N; s\\" s8 Q\\" J; }/ {. D0 L
- package createxls; z6 f# J4 e4 R* Z( ^7 T6 i/ ^8 B2 ?
- ' j# e4 h9 h% X6 ]\\" U- P: T% @
- import java.io.File; . Q: ]7 k( Q5 z9 t) \
-
- + J) n5 ~( K, w; C4 v. L/ a4 P
- import jxl.Workbook;
- 7 {, q3 i1 ]: X! Y5 M' a& T
- import jxl.write.Label;
- ( W& g/ a0 p% }# _# ?9 F
- import jxl.write.WritableSheet; / Z/ B/ O5 Z: B2 G
- import jxl.write.WritableWorkbook; 5 n5 K% _, f! q' q& _, x
- 9 @) \5 ~* L$ N/ P t' N$ @) g9 B- ^- m
- public class CreateXLS {
- # _0 }- }9 _' r- G& c* [3 Z( B: ?
- public static void main(String args[]) {
- 2 J# Q( K' X$ p
- try {
- ; e/ e \2 e$ _) D$ e
- // 打开文件 - d9 ^9 a( x$ L/ s\\" w- m: p! s
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- + F5 |5 R- L' @/ D' g+ r% w
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- ; F+ w9 Y3 B0 K4 c' A8 J5 K
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- + ], J\\" Y6 [$ x3 w/ t/ C
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
- 5 s ^5 G9 f1 `, K( ]0 I5 e1 a1 ~
- // 以及单元格内容为test ' g% j$ u/ f1 e2 d9 m2 G2 F\\" N
- Label label = new Label( 0 , 0 , " test " );
- & M4 O+ e C% B1 ]+ v
- 3 \5 B9 P6 H\\" A
- // 将定义好的单元格添加到工作表中 r/ z) g) W7 @( |& M/ I! F% s9 J
- sheet.addCell(label); , n/ U\\" C% e6 J: b8 ?8 a. i8 H
-
- : W$ f# U# t\\" W
- // 写入数据并关闭文件 \\" Z. E0 a! M! d O1 _
- book.write();
- * Z( I/ D q( b. K( x
- book.close();
- * N# b$ y\\" d; T% x# T4 I( Y; `
-
- 7 P3 ?, e4 n\\" ?/ u/ r
- } catch (Exception e) { 6 D. I8 ^9 `6 n
- System.out.println(e); ' j: J. x( i' i+ U
- }
- % q4 u% J& d7 l
- } 2 j r+ y6 |7 Z
- } 3 m% a4 i- T: o! ~/ H
- * I y+ r8 Z i4 q
-
- 3 g/ Z/ }% q' }( h
- $ K5 _/ h/ p! t% B' C0 B/ N* U
- (2)读Excel文件
- ) x: a; a0 W! F) N6 R& @. ^; J
- ( h* @% O4 I3 F- G3 A$ `
- ! X4 A+ i7 Y$ d3 F0 `8 `
- package readxls;
- / {- b3 c$ i( h8 [- M1 c: ]0 |
- ) z3 h: M7 L1 a8 d5 w5 a
- //读取Excel的类
- / L: v1 r: H* E6 R
- import java.io.File; ; o) f' ]/ c$ X
-
- 4 Z5 \\\" `8 I; ^
- import jxl.Cell; / t1 [4 o0 B7 S0 [! F6 J7 T, N
- import jxl.Sheet;
- - {/ P6 j* e3 B* z' V+ ~+ R& V* R' T
- import jxl.Workbook;
- ( @+ K! f4 E\\" ]
- 1 ?+ L7 s& ` J# X\\" m: y
- public class ReadXLS { , o% ~4 Y: L3 r6 ^4 u& Q
- public static void main(String args[]) {
- ! | E; V4 O6 i
- try {
- 6 G8 z. r! H `\\" A- G1 C6 Y# ]
- Workbook book = Workbook.getWorkbook( new File( " test.xls " )); 1 X a+ Q. s0 `+ k* E- z
- // 获得第一个工作表对象
- ' A+ I$ t5 E3 ~\\" N
- Sheet sheet = book.getSheet( 0 );
- 8 r6 u\\" T2 B# q, E1 @4 r
- // 得到第一列第一行的单元格
- 0 w7 T& k' M/ L( G+ R* w+ X
- Cell cell1 = sheet.getCell( 0 , 0 );
- ! q4 U8 } ~8 ]* S& m5 L! ^
- String result = cell1.getContents(); j2 Y2 z1 A2 [
- System.out.println(result); \\" }) n. g; |5 h
- book.close(); ; d: K% c8 b4 W% B! y6 E& B9 n9 y
- } catch (Exception e) {
- 6 V' C6 C& S! h) j, `7 ^7 g
- //System.out.println(e); + H1 W3 R6 y5 \8 @
- e.printStackTrace();
- 9 x) w/ O; ]; z\\" D( [/ B
- }
- + n( m9 q! X2 `; r# Y
- }
- ! c/ }! U9 A# W3 z
- }0 t2 w, w$ q2 ^' e y) o
- % I, p) f; p, e: l: E0 G4 z8 v+ @
- $ k$ R/ W& |6 ?+ Q; ]9 q
- 9 R: u7 z( C. j- z9 }5 `
- . _+ ?% ^$ U( l: A
- (3)合并单元格、格式化单元格等
- ! G+ n5 D2 `: s3 a# c( {- Y
- , I# w0 K3 x7 ^+ o
- 3 U- v% |5 w( r4 [' U/ ]
- //合并单元格并在单元格中输入内容
- 6 d# x# w2 B% Q1 e
- 3 W6 _2 T* y# J5 U
- package additionalproperty;
- - C& P8 K& c1 x6 o u* e: [9 D' W! {
- % l6 E S5 J# P7 `( I: s6 t\\" w
- import java.io.*; r9 l& g4 Q0 V5 S5 ?
- import jxl.write.*;7 A# I5 e( h8 g# x
- import jxl.*;
- \\" U, n( ?: n$ r+ C* a; O* D: d; ^
- ; W Y2 @\\" z# }
- public class MergeCells {8 P O# a. m$ n W& Q' d6 U! p
- public static void main(String [] args){\\" F; X' _) S6 c/ a2 a+ k
- try{
- 3 z) R4 R2 l\\" y [
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));9 ? a8 g. O4 H' G2 b8 L
- WritableSheet sheet = book.createSheet("第一页", 0);7 k' h# M\\" b* N( a& _1 v( D
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- # V4 b/ F- l& ?) p
-
- 8 D' p\\" H% Q8 |; r! {3 L
- //设置填充内容的格式! W% G9 b, D. j! o! T; E% M
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);9 ]% l, f/ ?4 k3 P* d' c* S
- WritableCellFormat format = new WritableCellFormat(font);4 v& E( j# _0 u( A% i) ]1 V E4 s
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
- \\" a\\" x% Q* r1 p( B U
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
- 5 r/ g! k$ [3 z. b3 U& j: l/ M
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
- % g; @: i: k: s
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- ( y0 e* m\\" r0 e6 Y& t\\" Q
-
- ) Y* p. O6 v8 t# s
- Label label = new Label(3, 3, "合并", format); //添加内容0 k; k, L d\\" O, L
- sheet.addCell(label);
- 8 n& H9 {$ D' x) y1 O
- book.write();% b- c3 W& n! |, `( f# T
- book.close();6 x3 Q: D7 F+ B9 f
- }//end try
- P* x/ N4 e1 a2 J3 k T: Q* A% [
- catch (Exception e){9 R\\" o& t; |6 E i. W: X2 @
- e.printStackTrace(); I# A* b, q( |# c
- }4 j2 V; s, ?2 M2 l4 r$ g. o3 t/ {
- }
- $ }1 o/ c/ A# \( Y f
- }
- 6 c4 @6 {\\" U% l2 E
- 8 f( G; Z S) F1 T. M7 F1 X
-
- b- o, v- P% d/ V
- + q7 {: C ~9 Z\\" I6 F
- (4)添加图片; F$ K8 R) f q
- ; S/ `% F2 ~; c# A: u
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。, n% z$ W4 _5 Q$ i# H5 M4 s
- * u1 r7 g* c9 L- o7 a
- 5 o/ h9 e: v) ~1 v
- //在工作表中添加图片 E9 F2 a o0 `\\" b# p7 g
- 3 f4 `* m8 \9 g1 {2 Z! L) s& A, A
- package handleimage;! N' g8 E$ \# R
- - ^, X! r- e/ C+ `+ }: _% L# z
- import java.io.*;' T! X, B3 _( s u3 C3 C
- import jxl.*;
- . m3 K4 X3 j4 A& v2 F! K
- import jxl.write.*;
- / `, R- C: I& n1 T& P; ]
- 3 O) A! ~% E7 d
- public class CreateImage {
- ! F. W) Q( M5 h0 @3 z K Z
- public static void main(String [] args){
- 0 f\\" c- h* W9 y' @% l9 `/ o
- try{
- 9 R H\\" v5 p: z
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- 1 X9 T' t8 u& ]: g\\" C
- WritableSheet sheet = book.createSheet("第一页", 0);9 {/ f) I' m0 j7 }5 p+ p2 l3 h
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
- 7 o; N w3 X\\" V/ ?3 j
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- , ]+ f: m- L: X
- sheet.addImage(image); //添加图片$ }1 C3 u x7 Q/ L( h6 Q9 j1 v+ C; B
- W' N- M0 [& J! ]: t
- book.write();) Y$ h- y2 ~6 P
- book.close();7 h2 L0 ?( J6 A' }, ^5 s
- }//end try9 p, n$ f4 F, W1 l( `5 I0 t
- catch (Exception e){ e.printStackTrace(); }
- 7 l/ V# r% }! C, r {/ O! M
- }5 h2 @, }4 d; {3 k y9 h
- }
- $ r, m% [% X. s& V3 |$ M
|
zan
|