- 在线时间
- 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的使用方法。
- , i& G- L\\" R! A, y
- * b2 {* v( L- ^2 V
- 1、环境配置
- 2 ]9 m( Z+ B, g5 D
- . R7 ~8 L& S% l/ r4 A
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- : I: p- ]& A' t3 z6 e4 d2 ~- g\\" E( N
- 0 M- @0 n7 |& K8 C\\" I
- 下载完成的包解压之后,可以得到如下几个重要的文件:2 U4 f7 p4 @& |+ K& C
- 4 p6 b; [! I$ c4 \& b
- (1)jxl.jar —— JExcelAPI 函数库;
- 2 U& G' s! b0 ?
- + i- A+ F$ W/ |6 O* y$ F+ G1 N
- (2)docs —— 帮助文档;5 P% E8 u( G8 e; o. X
- - _( ?9 b! ~8 R4 E% Y
- (3)src —— 源码文件夹;% E: T+ P6 u! F+ `1 S( E
- \\" B, L0 A* j$ z$ ^3 u
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。9 y% T\\" G1 R$ \( |* t
- 2 S+ |- M' [: }8 J) {2 M$ ] ^( w
- 2、Excel基础操作实例8 i\\" _/ C# A, b$ ~
- : y% e. m1 W. Y5 x9 h
- (1) 创建Excel文件 / Z% L* b3 r9 }# U. w+ d) F
- 1 _+ B- i) k7 S6 A# P. E. `' H# e- {
- /**读取Excel文件的内容
- 2 I2 o4 b% Q4 ~& y
- * @param file 待读取的文件 / r6 _3 z8 }( o8 F+ {; s! t
- * @return // 生成Excel的类 */
- . T) z) k: W# }3 @
- package createxls;
- $ j! V; r4 p& k% [% b( u% G
- 6 L9 j- a. F& |8 Y' e, i7 c
- import java.io.File; % |% P3 k# D6 E' p- j
-
- 3 n; m3 E7 q; n( v5 V4 n
- import jxl.Workbook;
- 7 `; q9 K% u: {% Y8 K( U
- import jxl.write.Label;
- 0 p\\" J- x0 t P3 c H7 p. G; q6 l
- import jxl.write.WritableSheet; w\\" W5 u\\" ?5 a' x# O
- import jxl.write.WritableWorkbook; % {( m* T& Z- ]& |
-
- 7 ^* G; d5 K0 O- _\\" P x
- public class CreateXLS {
- , I- b' J3 F1 V- D\\" |; b1 V
- public static void main(String args[]) {
- . A5 n F! l$ Q2 l* m8 p* ? O$ B
- try {
- / [5 ` |, o9 o3 {7 O; \* z2 y
- // 打开文件 & B* r$ C% X2 d; {1 ?
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); 8 ?1 c, q) i! N& \# W& o
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- 3 r& U! z$ o$ t2 `- u( n\\" J
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- , j8 ^. d% x\\" B\\" c# H' d& P: ?
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) 6 y4 R) f% ~2 u+ @
- // 以及单元格内容为test
- 9 D k& x: f L% {
- Label label = new Label( 0 , 0 , " test " );
- 3 m1 J$ t+ ~0 n* g& J4 H( \
- 1 F\\" ]& a7 ] X1 i. u
- // 将定义好的单元格添加到工作表中 ; N& i0 r2 C' l1 [4 n# y5 U7 b1 S8 j
- sheet.addCell(label);
- ) ]7 J\\" I' T' J- a W9 {' M! \( w
-
- n5 K* s5 R% v: ~) p\\" q- {# W0 {
- // 写入数据并关闭文件 ' M. q# W6 U0 Q) g- c& d* D2 U
- book.write(); 0 W; U' m) ], s* c' l
- book.close(); : _, K2 V+ J I) z) C& o
-
- 9 `7 n. C7 y. {, w
- } catch (Exception e) {
- 5 a! i' Q* M& w2 p6 P4 D\\" Z
- System.out.println(e);
- ( j2 B0 ~4 `& g# E: @; ?) w
- }
- / r1 A: q2 r+ c# O# ?+ z# O, u
- }
- , I! ^6 w3 Q; j7 K7 D& M
- }
- ; X$ i- j9 V+ b1 f/ j6 N- U( [, T! T
- 9 S' i9 v: _0 o* K
-
- % p- d4 o6 T) K0 a) ` x% G
- 4 C6 D! g2 Z4 M\\" \3 W
- (2)读Excel文件\\" ~) A& O4 e D
- 1 w0 ]4 S, I$ e\\" e7 s\\" r
- $ f0 d) l/ K. K8 S6 i
- package readxls;3 O# |\\" F; S$ Z$ J1 G2 }
- 4 y! x( B& Q% M6 M' ?1 |
- //读取Excel的类
- / I# v$ q; s9 W- n
- import java.io.File; 7 U4 L3 L- b/ `; m+ G. C2 M
- , |/ `: |+ |3 s4 [
- import jxl.Cell;
- ' Q6 @- B! r8 O, b/ S
- import jxl.Sheet;
- ( f Y' @* ^. i. J W9 A
- import jxl.Workbook;
- 5 D8 s. R1 F2 R\\" m
- ) Q0 I3 X& G/ E8 Y7 ]
- public class ReadXLS {
- ) B H, e2 ?9 b H# F& i
- public static void main(String args[]) { + e7 k5 V( G5 S\\" ^! e) ^1 Z% N Y! S5 r
- try { 5 w* S9 M0 F9 b
- Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
- 5 i. h- s6 _' D+ k |2 x. T
- // 获得第一个工作表对象 ) E6 |4 X7 |* a: R _: }
- Sheet sheet = book.getSheet( 0 ); 7 X* F- `$ Q\\" ^* Z U
- // 得到第一列第一行的单元格
- # |7 N8 g& d# N/ {* M! x
- Cell cell1 = sheet.getCell( 0 , 0 ); \\" I( o# p, b. E, l& C
- String result = cell1.getContents(); 1 H) x+ H2 F* C; m
- System.out.println(result); ( q3 V2 f$ l* C. x6 Z9 V$ C
- book.close(); 0 x: o* R/ \$ s; N |/ [+ E. P
- } catch (Exception e) { 2 Z0 H N* y3 S& V5 y\\" \
- //System.out.println(e); 9 L0 B6 l$ \2 M0 E8 ^# N6 d
- e.printStackTrace();7 |; l( T. T4 M! m, [
- } 9 a6 n% h9 t U6 B# C
- } ) G: ]6 }! z; J, O8 p
- }
- - u |# o8 h' V2 k) L- W% r\\" z* ]
- 4 o\\" S. a3 W1 C8 r- P- {
- / e\\" q1 T1 V6 s' t: g3 y; R
- ( [! d( ~# |( K' Y% N
- ( z6 l: b5 f1 g4 E3 i
- (3)合并单元格、格式化单元格等
- ; g, N; c6 m8 O7 ~
- / o# k. p, Z3 l2 i
- 5 M/ x* r/ I! U; V
- //合并单元格并在单元格中输入内容2 }0 U7 H9 \8 V, z( c% c+ c& ]
- : X3 k0 u9 z, K0 ^; X- K
- package additionalproperty;
- 7 q1 [! X' \ ?\\" p }( u
- ! F7 n2 A5 r\\" {9 {* Z' w
- import java.io.*;
- G- G& y1 Q/ {1 d0 G2 L) w
- import jxl.write.*;
- D! ]3 G$ a! B8 X0 p/ B
- import jxl.*;
- ! {* e+ q5 e* m- R0 u
- 9 a) A7 {7 k: t2 K0 G
- public class MergeCells {
- & O5 I, G6 p) o$ z
- public static void main(String [] args){$ l+ d* n- Q0 t% N
- try{& V, Y' w9 C! m
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- . I9 f\\" C ^6 [4 H2 c
- WritableSheet sheet = book.createSheet("第一页", 0);
- \\" n; G1 M\\" R* F: t# ~2 F) M& _
- sheet.mergeCells(3, 3, 6, 6); //合并单元格. a3 L: v+ V& [1 t5 }: i* D0 ~
-
- ( M) g- Q% _2 Q: j' d# b\\" w( K4 O
- //设置填充内容的格式# [: ^7 w- V8 \
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
- 7 y& G# t3 u6 ?7 E+ k
- WritableCellFormat format = new WritableCellFormat(font);
- $ p. [* z5 E- U' r3 U' p
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中# l- F\\" A/ P' d/ U9 L4 K7 ^' \7 K
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中- W6 { V/ v9 Z
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
- 9 V: c1 _+ F n# t T, y
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- + U; y2 I4 q9 T: N/ ^, C
- ' } z: m: t7 R' q3 _
- Label label = new Label(3, 3, "合并", format); //添加内容
- 1 v% J( I- o5 _% m
- sheet.addCell(label);
- 2 X: E\\" u; x* m( i- f: B/ r4 S
- book.write();
- ' y2 d t4 s* k\\" E) @) E
- book.close();
- * V& c* r) N$ g. q- A! ~
- }//end try
- + E) f! y0 w7 I8 E$ s\\" T: ?& P, u
- catch (Exception e){) v0 O& O$ x, Z! M5 }. {
- e.printStackTrace();' {% _- Z3 @! I2 i7 G\\" L6 \
- }) @! f9 _( ?1 a. T W
- }( Q- q( d4 k; ~% h5 ~
- }
- ) b- R) }7 O' O M
- & m8 l5 d2 }1 d8 w# O
- / ^3 I+ x0 j- z+ Y1 j1 ^& V* s/ U
- 9 C! Y- F* S, p# N1 V
- (4)添加图片
- * i$ H\\" f+ g: v0 {3 ~
- , M. c& c\\" g2 `7 w- ~6 o! H9 R
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。; l$ }8 M* e d+ ?5 N' f
- \\" e7 @, `# Q0 [& Z. d' g5 p& u3 {; H\\" A9 D
- ! I$ E% R, y5 J2 k$ Y2 a# r+ |8 F
- //在工作表中添加图片
- 6 Y% U6 h% j# H; {. B- r
- 5 j$ }4 }* T1 M* }, y$ m8 \* Q
- package handleimage;4 C% R9 [$ g\\" `/ S: A8 l; ~
- 6 L\\" h/ I$ X* y6 V
- import java.io.*;
- $ ?8 `$ `! H$ p4 G7 ~
- import jxl.*;$ w% B+ }! E2 p. W
- import jxl.write.*;' Z2 h/ c6 R3 h\\" S2 d2 q
- * i& H6 p- j) w( x
- public class CreateImage {
- $ \* g$ q, T* ]4 q
- public static void main(String [] args){9 x2 u, e& H4 [, R% u
- try{/ e8 t% m6 p, R
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));\\" e5 l& O! {) N) r! v
- WritableSheet sheet = book.createSheet("第一页", 0);' \9 [- v$ p2 K: K
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
- ' Q+ Q) @* e& A
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- $ N N5 j7 l( B\\" y0 o! ?- b) Q
- sheet.addImage(image); //添加图片
- 3 c. N+ f* [; A( e$ _: |8 }
-
- 5 w% w7 l& {! ?
- book.write();
- 8 [% V\\" ~# e* |0 ^& H3 h* W% B- h T
- book.close();
- & B: h0 p0 v# f5 C5 O; p; N
- }//end try r0 x# \7 R! W
- catch (Exception e){ e.printStackTrace(); }
- + C: b0 {( j) L R% J* v
- }& b0 I# @1 X) O; U+ l5 ^7 j+ J
- }
- 2 u9 u a1 U3 V! W4 n& `' ]4 @
|
zan
|