- 在线时间
- 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的使用方法。
- ' |8 R. p, v; G8 g1 n
- $ N8 t1 w) ?2 y\\" l\\" C+ L
- 1、环境配置
- * I7 R! T' h8 V, I, p8 E
- ! i* N\\" Y3 J$ g% F* m+ ]- X; H
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- 1 P& E7 ]3 s' ?0 ^& V* M0 s* p
- 0 i' i* S1 n\\" ]5 r# C8 [. X+ E
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- % l\\" p! w2 d c$ C* j' N$ C
- 3 Y& I3 K# M% o9 O- P
- (1)jxl.jar —— JExcelAPI 函数库;
- 6 E- l% i\\" Z% p# M! m
- \\" U5 J* Y6 s2 C( d* ]
- (2)docs —— 帮助文档;* G9 m( V5 T. Z7 K1 j
- 1 J& v+ N( J0 X' s* w5 c- s8 [
- (3)src —— 源码文件夹;
- I/ }( d, w9 g4 j. v0 c
- 5 v9 a' B' _0 B- B
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- 6 b4 v# c) c( |' I+ b( x\\" i( N
- + `4 q, z' U+ \8 F, x9 F; R, \( f, [
- 2、Excel基础操作实例
- ' T) q L0 h4 m$ u3 S) A/ T
- - F) e( k$ c4 j& m6 R/ H
- (1) 创建Excel文件 ; h/ ]. a4 B) T; @; A4 }5 D6 W! m
- 2 d4 X2 v/ f3 T6 X( c1 J2 L( h
- /**读取Excel文件的内容 3 l+ v* h% O7 U3 W. f& G
- * @param file 待读取的文件 $ b' ^. |. w$ U5 W
- * @return // 生成Excel的类 */
- 7 q% z* ~2 l! ^\\" T: R% d0 t
- package createxls;8 u u6 w2 m' T5 L8 {
- 9 D o9 ^; J8 v2 _\\" l6 x
- import java.io.File; 7 h0 d4 {0 m& E; k1 ^/ n% {7 G
-
- v; a+ A2 a- k' v7 b
- import jxl.Workbook;
- ) x! e$ }$ } F& H! C( {
- import jxl.write.Label; ! G' [8 Z. w3 \
- import jxl.write.WritableSheet; 7 J2 L6 U; C& u: _
- import jxl.write.WritableWorkbook;
- * D3 i$ ~1 K+ R% P9 K+ }
- 8 _8 @* L% o, K: `! E5 f* P
- public class CreateXLS { ) g7 p+ ?- \( h\\" @: o+ ^: C
- public static void main(String args[]) { & K- X: [' v( n
- try {
- ( l/ P8 D\\" I3 [% [4 U/ o5 F
- // 打开文件
- & ^' A2 K4 P# B5 P
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); 0 Z5 r4 y2 p. T/ }' C+ G
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- + X: s& }$ K! `, H, i8 W! a
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- & q1 J% k2 U: o: N% B, B
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) * `- h- ^5 f. v0 ~\\" u; `, z2 C
- // 以及单元格内容为test : h. h9 l) H. x# X
- Label label = new Label( 0 , 0 , " test " ); & x* @1 t4 ~. t\\" i0 a4 T
- & A5 v8 m+ Y$ S/ {( I0 o
- // 将定义好的单元格添加到工作表中 % K# K! w\\" W# Q) E
- sheet.addCell(label); - \3 L( U5 Q( N i
- $ Y `' @9 p( W/ x* `' @. l% f4 ~
- // 写入数据并关闭文件
- + X& a4 v4 T- x\\" K' Q) `. U1 P' z8 P
- book.write(); & C+ }9 d9 D: M( G8 W5 {+ g, Q
- book.close(); 0 g7 v5 z\\" o. V/ X0 _' D
- 1 H d; Z3 o y4 `0 \5 D
- } catch (Exception e) { 0 Z% }, z$ R B; g0 T- a* H
- System.out.println(e); ) R) v! h! U; W1 `' {3 m' C2 Y M
- }
- & F6 R' Y5 x5 P$ ^+ i
- }
- F8 ]# Q( y! v& Y2 B' }! y: q\\" H
- }
- 3 k! ?' c) b' `5 m. z8 Y
- 3 A% J$ Q% Q8 W
- 7 z) y5 j5 c. o; B. o
- 0 L' t; a4 m, @/ W9 q$ m
- (2)读Excel文件6 U/ y8 W/ v9 l
- : s9 X* o) `; m
- \\" l9 G7 z% w4 t3 |' E
- package readxls;
- 4 w8 X$ ~3 ^0 T
- _! p! g( ~, k+ m \6 H
- //读取Excel的类 ; x- {- l' P0 E\\" c) F! o' I8 O
- import java.io.File;
- , N6 _. ~- F9 k\\" i. S5 v3 X
-
- $ e/ {; r4 i\\" p# x
- import jxl.Cell;
- 1 ?4 M$ |1 a9 h# l/ `( E
- import jxl.Sheet;
- - H. C6 D' A% R: G1 D+ T\\" S; Z8 a
- import jxl.Workbook;
- 1 P, L* Z0 @% Q5 l\\" z* m* l
- $ T9 o& h- e# K7 Y
- public class ReadXLS { . p8 w Q; ]$ c; Y
- public static void main(String args[]) { 0 Q5 i! H% Q' \# r, C1 R% C2 r
- try {
- # e% z3 E. c, L1 C- Z5 l+ z
- Workbook book = Workbook.getWorkbook( new File( " test.xls " )); . G2 V. M4 t) D1 v+ s4 A& D
- // 获得第一个工作表对象 + D- f% ^( Y6 A) t( }
- Sheet sheet = book.getSheet( 0 ); 1 s) i& [) h; H* a5 T
- // 得到第一列第一行的单元格
- / o$ Y/ o4 _( ]' Y N2 j8 G. Q
- Cell cell1 = sheet.getCell( 0 , 0 ); & m0 [. s- T' [: ?9 u
- String result = cell1.getContents(); 7 a. H. f# e+ c3 s# b, N$ f
- System.out.println(result); 0 e7 E z; c; Q3 U& x' E% x
- book.close();
- ; z4 M! Q- @) t% o; D% V5 t
- } catch (Exception e) {
- 8 m; n \0 F2 x3 B7 N/ D
- //System.out.println(e); $ G; o3 H& g' X. L( [$ K
- e.printStackTrace();
- 4 \ M3 V0 e0 t+ Q) G
- } & F5 l+ T8 I; i4 H7 O
- } * m5 E6 m1 t7 D/ u% h+ u8 Q, a
- }
- # v; _* l1 v# u
- 2 M; N- C1 l* K$ D, |* U. Q
- # ]1 P/ x/ l\\" S K- f5 K
- 4 r. i6 V& ?1 Q5 s' G, K0 D$ f4 C
- 6 I5 s0 @) a L* C- q9 C) ~& n: N0 W( k
- (3)合并单元格、格式化单元格等& f+ p\\" x2 ^8 R3 o, ^3 S! }/ ~% W
- , U\\" K\\" w a+ X$ V
- , W3 K\\" k ^' b: o1 {
- //合并单元格并在单元格中输入内容# k( _8 D8 }$ @
- + D( }0 [* C7 a- z) @) V' `$ }
- package additionalproperty;
- + z5 \; P& A\\" v3 J# g* I
- # \/ w3 Y; |, [, d, n
- import java.io.*; o) x. D* l! q [+ P
- import jxl.write.*;, F9 i2 C4 f6 b) [
- import jxl.*;
- ! t4 a; j\\" y3 m+ [( B( c; d
- % x7 k( q\\" S% C$ w
- public class MergeCells {
- % a3 |9 R5 V. E5 Z* e
- public static void main(String [] args){, K. s# V' z3 Q\\" z, @ C\\" Q
- try{& j ^3 I+ I0 `: R/ J( I
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));+ e+ m O& \& [# l1 |7 J- i
- WritableSheet sheet = book.createSheet("第一页", 0);
- 1 s1 ^ U( b5 b/ P8 C( O; a r
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- 5 R. q5 G! n7 V; _7 i+ `/ j$ [
- , n' z) U( s; \+ C# v, t
- //设置填充内容的格式1 p& N( a+ {3 m\\" O
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
- 6 g& w# S$ A4 U1 g5 G7 i- G) H& v
- WritableCellFormat format = new WritableCellFormat(font);
- 0 T* ?% Z( q5 v) K2 z* m
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
- 4 F5 J: [3 A) v3 q
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
- # ^- p6 g\\" K+ {6 S
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
- 9 o3 g8 B+ X2 E) L3 i' t5 ?& }7 a
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式- V6 B% ]5 H4 t B- P( Q9 t( V
- % p3 W# s' u/ `
- Label label = new Label(3, 3, "合并", format); //添加内容
- 2 D% Y0 w\\" E7 H4 {& N4 S* G
- sheet.addCell(label);& h\\" r0 O+ y+ U9 W
- book.write();
- 0 U4 N$ {% e; K; l9 v1 ]3 {
- book.close();, l0 L9 M: Y1 `! v
- }//end try$ J9 e( Q* w. q' p2 B, i, x
- catch (Exception e){
- G0 g1 P* R/ @# Z$ K _ |7 ]
- e.printStackTrace();& [0 H/ ~ h1 r
- }
- % X3 o4 R! [& b' b0 Z/ r
- }
- & i; j* l5 ? F# M& b! G. i$ W% |
- }
- 4 e* I, K+ p3 E. ?% g2 x$ U
- , [, x% A V* _0 F; p
-
- $ {% [* j# h4 _: l% w
- \\" x: d) `! ~. s; U0 ]- g
- (4)添加图片. r/ H- e7 ]' ^& @% n
- $ ~3 A\\" J- Q/ \! S- Q
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。7 E; h. K5 ^9 u9 z7 j A
- & W3 _( }/ u2 a9 F* ^$ X* Y2 K
- - C) z& F; @, x2 d5 c* O
- //在工作表中添加图片5 l4 @. Q `; U% R
- 8 I& U! \4 U( Z8 s! [- O# f* [4 p
- package handleimage;& d* E$ ?- E5 t% r; r
- ; ?5 r6 u; g% L
- import java.io.*;
- : n6 _3 ~9 e7 _4 ]
- import jxl.*;- g7 f0 F! B* M* G2 e$ ^7 o
- import jxl.write.*;
- - K1 k6 \$ d% ], c* n' s
- 2 E2 o* @# d0 V5 v2 F4 E
- public class CreateImage {
- 1 p% p. o9 ]3 Q+ _$ ?
- public static void main(String [] args){
- ; j\\" m5 R3 f0 _6 @. V
- try{
- - n* m- L7 L4 W8 O$ U& [
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));; f) b# ^3 y8 l/ N; o0 c8 |+ R' j
- WritableSheet sheet = book.createSheet("第一页", 0);
- 9 @/ J/ b4 f; u% o) @
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
- / v3 n' s9 h/ i) s. C2 P
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));% A) s4 ~9 K3 v2 H. V# O. {
- sheet.addImage(image); //添加图片1 K6 I, o4 j0 @4 d/ l; z% x
- 0 ^: i. C! [5 C% W
- book.write();6 b5 l1 a0 Y6 |
- book.close();7 o. ]6 `4 D; \1 n
- }//end try* E, N2 Y: X' G% x# V
- catch (Exception e){ e.printStackTrace(); }\\" [5 A) t* ?% l
- }/ g4 b5 j. X8 Y9 B$ g* s4 S* P; @, m
- }
- * {5 S( r' w4 n! l- T
|
zan
|