- 在线时间
- 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的使用方法。0 l! G- l1 R) z
- 0 g+ a& A6 \; r\\" e* [
- 1、环境配置! V- N) x7 u9 d8 t+ ^
- \\" }5 Y) ]8 m8 \2 }
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- : i9 V0 N5 w8 @8 }
- - D. _& ~2 ^/ J( m2 B
- 下载完成的包解压之后,可以得到如下几个重要的文件:; u, I U* @: g6 a- B: x
- & B6 p& a: T: `% [, W
- (1)jxl.jar —— JExcelAPI 函数库;
- / J0 E. X7 k! ^2 Z$ G
- 1 B `# X c) c+ b
- (2)docs —— 帮助文档;7 ?: L( W# V* k9 v+ u7 Y$ b
- 2 [# I2 d! {# M0 k `: E
- (3)src —— 源码文件夹;, q3 A# W u$ Y- i: ~
- : P) s) v$ K/ _6 e! A4 B
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- & S5 N1 @8 T6 m/ |
- 9 ~' r, F' P3 A7 {3 g) i5 S
- 2、Excel基础操作实例
- ' |. d7 Y! r; Y
- # D% c0 U; Q, O6 G
- (1) 创建Excel文件 8 }- c\\" {2 a2 D
- , l$ Q7 s' E3 c
- /**读取Excel文件的内容
- ( X9 |' a; @6 v\\" D: ]
- * @param file 待读取的文件 + Q* d. ?) h) Z6 o
- * @return // 生成Excel的类 */
- + i! \% [7 ]9 q5 P
- package createxls;$ q$ B3 D\\" Q9 l- t
- + n5 c. ^. @( o\\" E( [; M
- import java.io.File; - K, ^4 d h0 ?, H+ N- J6 Z
-
- & [2 e1 Z( X3 P0 G$ ]
- import jxl.Workbook; & Z1 S0 r/ z6 j' S7 b% W% Y
- import jxl.write.Label;
- : C9 ^, z5 y) N. q
- import jxl.write.WritableSheet;
- \\" C\\" Z* {/ q8 C; K3 L5 k& [
- import jxl.write.WritableWorkbook;
- , r\\" I2 K/ W5 U* U9 U5 L
- . A( y Z2 i9 }3 `, E. R& d
- public class CreateXLS { W4 p# Z' \6 _5 I) Q1 n
- public static void main(String args[]) { 0 Y6 Q, A( O# E, K$ K+ V
- try {
- 6 Z+ @' G: b( p
- // 打开文件
- : S( G1 Z; s( H
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- T7 P, [; w8 c5 v! l E
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- , n- O2 |# ]# w3 |8 x\\" {% B3 ?* d
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); J. O, {, |( L8 i9 p
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
- ! O3 Q* r/ a, ?\\" l8 }2 `
- // 以及单元格内容为test
- 3 d- A8 Z\\" G+ L7 |2 l7 J
- Label label = new Label( 0 , 0 , " test " );
- 0 m6 D\\" M9 q* ]4 _+ L) w# o
- / C0 j& y+ m7 a. K1 o
- // 将定义好的单元格添加到工作表中
- 0 Q8 e7 T- J j0 |
- sheet.addCell(label); \\" I3 f1 E5 j. ^; w\\" c2 r [
- / x; Q( a7 A6 f
- // 写入数据并关闭文件 2 h5 n l6 [& ~! q( X
- book.write(); t2 a( H* _$ v# G4 R& X- c
- book.close(); : {, p( ]& E& S# m& u* c& n
- . z2 @$ }3 t# w
- } catch (Exception e) {
- 9 s5 q7 x0 S% S+ Y
- System.out.println(e);
- 8 g1 x8 W5 f; X ]\\" |
- } : r/ X; l7 X* M0 u1 H
- } 5 @/ ~$ t- y4 c7 j, X! v8 h1 M
- }
- # X7 k! W I\\" w+ m) N
- : E# z* e- K3 I+ T( _# ^
- * z. o2 L. v# U* n& x
- ! e) g2 m# y2 E! n o2 R
- (2)读Excel文件
- & s\\" _2 D) p' S. W8 ^! q- O* _
- $ \, p8 o* y1 _
- : v5 u4 N& ` I4 M* y9 z
- package readxls;
- / a# c- E+ ]9 j8 j
- . I+ H9 C1 J4 x0 ^/ l4 c' A$ x\\" {
- //读取Excel的类
- 3 K$ B\\" [; I( ]+ l8 s
- import java.io.File;
- : u! [+ m k/ H4 ~2 ]* ?. I
-
- $ W2 ~/ M8 k% j2 H/ I
- import jxl.Cell; ' V( C: K- Y3 y6 [2 A, \# `
- import jxl.Sheet;
- + z$ @; H4 d9 l- `( Y8 i b
- import jxl.Workbook;
- : D( V0 R, b6 v2 \, h) b) H
-
- + b\\" Y& |% N4 Q. `! \, U* g) O
- public class ReadXLS { 8 M T5 S\\" i& q6 f
- public static void main(String args[]) {
- 8 P( g( _' p( K\\" |
- try {
- & |. E# j8 y p
- Workbook book = Workbook.getWorkbook( new File( " test.xls " )); 0 {5 v7 ?/ n1 O3 o: J/ x$ i: z
- // 获得第一个工作表对象 8 }! j; d! n( }6 P& t! }3 [5 ]
- Sheet sheet = book.getSheet( 0 ); # V% H$ O: b4 G+ Z8 H p8 |, D
- // 得到第一列第一行的单元格 3 B! s+ h5 Z' {0 r. m, {; l+ }
- Cell cell1 = sheet.getCell( 0 , 0 ); : g _# ?2 s' ?- E( W
- String result = cell1.getContents(); 0 D W- N `: A; R& }. X
- System.out.println(result); ' |: @2 _& g0 Q
- book.close(); v4 ^0 [7 N& b) l
- } catch (Exception e) { 5 ^8 z! z3 w; o4 o6 G2 p# |
- //System.out.println(e); 9 H% @9 j. @& O1 r& {
- e.printStackTrace();# f. B% D8 O% n7 K
- }
- ( n) @3 ^' B$ u/ R8 Q9 H
- }
- ' A* q- a* N5 |
- } @! J0 J7 o+ c+ [ a; Q
- 2 M& p' @; D% n- j' `
- / Z) o! e& p\\" m- e* y. l+ c( G5 j+ G
-
- ; \1 {0 N- T4 y' J% Q\\" u1 b# {7 ~
- . m3 h \* u- O& u
- (3)合并单元格、格式化单元格等
- 5 _. B. t3 O& ]1 \. w6 D
- # U- s. A/ r% D9 f! m; T q
- ; }* K. l$ e: Z& c% |0 p
- //合并单元格并在单元格中输入内容
- \\" x' a4 \4 O, b$ ~8 } z3 A' r# O+ o, Y; l
- ( C6 Q, E: E\\" V i- b2 V
- package additionalproperty;& G, N) N* s: P1 l2 L( z8 q1 e
- / g; p. M! K8 x- T- W4 ~\\" l5 n- l
- import java.io.*;
- 1 \+ s\\" w. j1 c* f! E\\" R* |
- import jxl.write.*;
- # t0 B1 w; w; }% W\\" g
- import jxl.*;
- + G; [6 D; r7 z. L( H' l
- . y9 M) p8 `# G* e8 z7 g/ e
- public class MergeCells {
- 9 i, n' j2 ?0 }; J
- public static void main(String [] args){5 w6 e) d2 @. K, P
- try{
- # A# c5 b3 B, w2 }. S
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- 5 J X1 S2 U2 Z# g& E ~0 s# B1 \
- WritableSheet sheet = book.createSheet("第一页", 0);
- \\" `- M. y% H4 O# E
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- ! V1 q; z, T+ w8 b$ P- c
- ; Y( i L. a/ F4 j7 y
- //设置填充内容的格式0 \8 U) y9 V2 S( K D5 R& T5 ~
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
- 4 w) Y, D- s- T5 W+ H& L2 G
- WritableCellFormat format = new WritableCellFormat(font);1 f. g% W+ s( Q8 `
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
- & O\\" [; `) W) `! e\\" j& g5 u9 N
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
- ; L/ R5 Z1 |# l
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
- 7 S0 Z) q; H* e* l$ f7 Q7 y9 M6 O
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- & y5 z* t) V* h1 z+ g
-
- : u5 v0 F6 `4 S l4 t% z
- Label label = new Label(3, 3, "合并", format); //添加内容) Q1 z; a. G4 P6 I3 [
- sheet.addCell(label);* h1 {- {( A8 ^\\" Z2 R
- book.write();+ u) b\\" ?. |! W
- book.close();; n1 ]/ t F( L1 g* E
- }//end try
- & T. ~7 }7 H# N# Q* t7 o0 Z( O1 q
- catch (Exception e){
- : Z9 c3 i# u2 ]& }7 `: L
- e.printStackTrace();3 T. Z1 [! |) p! b! O @. k3 U
- }
- $ u6 H2 A* {# y! o9 }' t0 N
- }
- 9 D' s l, ?; N/ L- @1 e: r% [
- }- R. z. O. X5 C9 m* N1 j
- $ W; J9 [. |/ U& G- b
- ' l1 Y9 @7 Q% `+ o% D- ~
- 9 I' o/ t1 b0 _
- (4)添加图片
- 1 Q$ t+ @2 S5 s( |
- # P. I# p* C9 ]: U
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。( p( ~/ F5 ^% K7 ?2 _
- V; S3 I7 T: ^# ?& {
- i1 X) Y9 b4 O+ }% n9 }
- //在工作表中添加图片
- \\" O8 v- ]9 ]- h5 B6 {5 _+ f
- # j. w: v* Z' S9 B9 D. s' E
- package handleimage;
- 4 `) x/ g0 K9 E# z) G3 E9 M9 y+ r
- # X5 E% \, F8 e ~3 U
- import java.io.*;2 `; v/ x/ O! \) W% y
- import jxl.*;$ w7 r6 }( s! _# r) X
- import jxl.write.*;
- 1 V8 @- s7 |) @! ?4 |6 Q
- 7 N( M7 b+ F0 J! ^4 Z; e
- public class CreateImage {9 b\\" w' l* B7 G4 O
- public static void main(String [] args){% H* @' z\\" h. s& f; v: G( r
- try{& \0 G. \7 v- T. y* Q
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- & Y& i( c& ^. L/ j
- WritableSheet sheet = book.createSheet("第一页", 0);
- - Q% z( |8 B! r7 X
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式5 T6 X/ R* H\\" [0 c
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG")); d, O- t/ J. {\\" V3 ?* L
- sheet.addImage(image); //添加图片\\" W# ?9 y% ^. z$ U5 r4 F
-
- 7 M# U# e2 D( w) u) ~
- book.write();! Z+ g. ]/ _3 i' @
- book.close();
- + T2 {, U. ]2 f: o1 y
- }//end try
- * B/ R1 _0 v$ y. H
- catch (Exception e){ e.printStackTrace(); }+ A: l: y5 n0 M6 f
- }
- % g9 f+ L3 F# c' ~
- }2 X( ~! X: c& ~. O& k( W+ d$ {$ s' ?( U
|
zan
|