- 在线时间
- 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的使用方法。
- , v: f3 Z! j# q* U# ]* \, u
- $ W K/ ], l% @* P
- 1、环境配置0 Q) @/ {8 S' w( @ V# z
- & i0 p& H2 X5 Q+ V% [
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- 7 m3 D9 [8 Y# S2 {9 S4 y; z2 D
- o2 l& n' ?1 p, Y
- 下载完成的包解压之后,可以得到如下几个重要的文件:8 M; b$ Y+ M/ Y/ l
- l9 {; h+ b2 H8 o* M\\" E e
- (1)jxl.jar —— JExcelAPI 函数库;- o' K, `& g4 t9 L3 `; p
- % t1 F- N/ S% {, L; t' k2 L
- (2)docs —— 帮助文档;6 g) E# o$ y! p3 H$ a
- 1 ^- M: e4 g& ~4 I
- (3)src —— 源码文件夹; m+ f e' O5 \3 [' ]' M4 g3 R
- 5 n7 _ h2 n\\" {* d
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- v0 V( h, S+ \ J& x
- : Z H2 g; J( B% T: |
- 2、Excel基础操作实例
- 3 k; g; R\\" T g7 b9 ~8 `
- ! I, W% }) S5 [' k\\" l. }4 y
- (1) 创建Excel文件 $ s% ]* t8 C3 q( i
- * m\\" Y! s x/ V# V; O
- /**读取Excel文件的内容
- + [, L$ m$ U\\" F9 C
- * @param file 待读取的文件
- % \3 Q6 Q9 \% \
- * @return // 生成Excel的类 */
- $ x8 V. @! w# j# u+ x0 X6 b' f) W
- package createxls;9 W3 z\\" G6 e7 z& W7 a# J
- 9 f* F8 _# e# I O* x
- import java.io.File; \\" U/ `. s$ G4 a
- \\" J W$ s6 C* v* g' q\\" V* i$ S5 v
- import jxl.Workbook;
- 2 x3 c) ?3 m( m+ G/ }\\" B
- import jxl.write.Label; 7 @: D6 @7 l, a2 y. Q. K! w- }
- import jxl.write.WritableSheet; 1 R) a2 u0 _ ]) o2 i0 g
- import jxl.write.WritableWorkbook; : Z- Q4 x ^/ n/ z2 y/ p
-
- 0 O5 _% l% U( y7 m ?7 o
- public class CreateXLS { Y0 I: H6 X: N$ B, w2 y* b
- public static void main(String args[]) {
- 7 [' I6 q- @- m- x: H
- try { + d; {+ K( @& _$ q+ M
- // 打开文件
- 3 W* s$ @+ V4 p; K4 {, Z
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- 8 j. h\\" S5 ?4 B9 w
- // 生成名为“第一页”的工作表,参数0表示这是第一页 0 T5 h) |1 J0 }; U\\" T1 i- H
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- 0 e! T/ g) G! _+ ^( W8 m
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
- V# _4 F/ l3 m% @\\" P0 C
- // 以及单元格内容为test
- 7 h. b* n! _7 v
- Label label = new Label( 0 , 0 , " test " );
- + a3 |& b' o+ y ~ \ D! g$ r
- & A g) \\\" U# R0 `1 |
- // 将定义好的单元格添加到工作表中 9 Y! |0 @/ V V
- sheet.addCell(label);
- 7 B( I' C+ u, ^) n
-
- ; {+ [+ w8 u' v7 w\\" A
- // 写入数据并关闭文件
- ; [) e, p |$ J5 s( {. U% S4 F! \
- book.write();
- - r6 i: \3 {' `/ }7 C. V
- book.close();
- + t$ r# A1 D* w/ c) Z
- / a; ^9 a$ i( c$ m
- } catch (Exception e) { 8 K3 t! L9 r, m0 I7 d$ U& I; W
- System.out.println(e);
- ) z7 x. K* }! J' J+ _4 k( j# n
- } 5 U5 X* Q$ P9 g\\" w
- } ' Z2 b( v; G' o5 n* G
- }
- \\" B9 W; |: ^2 U; d6 ?% B% X. D
- ! ~0 f# P) @- P' N7 W0 R
- 1 h+ _* l\\" G7 c( {% H2 k
- $ a ]8 b( ]3 K* W9 p( S6 H/ C! S$ O
- (2)读Excel文件6 t9 M0 |) v1 M( S, R' }% s9 C
- ! h! ]/ ~( N, x0 x
- }: [5 P( s. |& B\\" j9 O! J
- package readxls;
- ! b T* n D* S! W8 F9 ~4 [
- + F' S\\" N5 x4 `8 F+ \1 ]/ U
- //读取Excel的类 ; W- F, d0 E& V1 i: u2 G1 v
- import java.io.File;
- * |; L5 p) U6 |* c5 P' ? `
-
- ' T' }+ q& s* |6 m' \
- import jxl.Cell;
- * {+ p5 N9 y( }+ J. _
- import jxl.Sheet; ! B# W' n3 Z1 |
- import jxl.Workbook;
- , o, G- X! |! D$ d* \
-
- \\" _$ _1 O+ ]; K) x/ b
- public class ReadXLS { ' f% u5 c0 a\\" g; z, C$ Q. F8 ]
- public static void main(String args[]) {
- % e x1 B/ [) J4 q! j
- try { / M7 P/ m& |) i4 [! x
- Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
- ' O8 H, `/ d2 w3 ^6 q- r
- // 获得第一个工作表对象 9 |4 l2 N, V: ~3 m
- Sheet sheet = book.getSheet( 0 ); 1 Y2 ^/ t: t7 s' }' }
- // 得到第一列第一行的单元格 . ]( d5 |; M: f0 B) Z
- Cell cell1 = sheet.getCell( 0 , 0 ); ; m6 V- j6 f% K2 [8 q9 H' n- r/ _
- String result = cell1.getContents(); 1 }0 x& \& x7 |. i! }7 @
- System.out.println(result);
- 4 l$ Z4 w f1 r8 g. X+ H% k
- book.close(); 9 ?3 ]: k8 c1 y# k- d' [\\" X: u
- } catch (Exception e) {
- S0 E. t9 H1 p* x; z
- //System.out.println(e); 0 [9 ?\\" ]6 {' R0 _' b( | f) K\\" A
- e.printStackTrace();5 C\\" f5 @9 @: H9 U4 n
- }
- ) Q( I3 y2 ?) ]3 B, Y% {% h
- } & p% l( f2 ? p9 R& G5 f* Y\\" M
- }
- - ^8 `0 Q% {3 u) ~% B, Z\\" K
- 7 E2 |, {# [% e- Y: q\\" V8 u\\" X
- ' Y0 |% N! H. S: m% X' z# d
- ; i9 v0 X$ t: f: H\\" {
- z2 e- S' y1 ^) ~
- (3)合并单元格、格式化单元格等
- # ~\\" I9 `$ r' p6 [: }( u$ ?
- \\" I2 J1 z1 }* ?+ j
- # Y9 @/ N1 V2 W
- //合并单元格并在单元格中输入内容
- 0 k1 y2 r\\" `: U6 q: P
- : p' g\\" c4 }% r; D! A\\" L) g
- package additionalproperty;0 V\\" o+ X; s\\" Y9 o: o2 n\\" c& f+ i0 h
- . U- \3 i0 n5 {' D
- import java.io.*;+ t9 k6 e$ _7 J, R3 S: d5 y
- import jxl.write.*;- L6 ?: v$ }; O* G l( B2 k
- import jxl.*;3 }! a1 [9 x- A7 g\\" ~. y
- \\" \; F8 P8 D$ f* f
- public class MergeCells {2 [3 `8 y0 T h6 w+ S
- public static void main(String [] args){( V, F/ c! c2 m/ J
- try{( m\\" f\\" P! t1 ?8 C$ W8 r# o! ]
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));0 K7 ?* u* T a1 w
- WritableSheet sheet = book.createSheet("第一页", 0);- W; N/ P: @6 [9 r8 @
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- + A. l% S! a3 g3 A3 ~8 j\\" C
-
- / |2 h\\" N0 P, j
- //设置填充内容的格式' c& k8 B9 a. j
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);6 _, x5 ?0 I! n* b3 [
- WritableCellFormat format = new WritableCellFormat(font);
- 9 c: v# b7 _3 B: Q* L
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中6 W# U' P u2 C
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
- # H. I# ]8 I; b, l9 |
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
- * W! b8 O% |/ t P
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- ' P, [' f8 s2 G: v- m! r- p: b# a
- |4 Y& X9 b) @
- Label label = new Label(3, 3, "合并", format); //添加内容! s7 o1 M4 ^1 R) {+ S* q
- sheet.addCell(label);, o- R, \2 P F5 J5 |& R. l( Z V
- book.write();2 E# ^: P\\" Y% X0 T( I+ D$ A
- book.close();
- * A3 F( l' u\\" p1 K3 ^9 c5 P P2 i9 ]: X
- }//end try
- $ D4 C6 D2 q, y: ^\\" X0 p- W) V
- catch (Exception e){' S* {6 g* B; E6 w( B
- e.printStackTrace();
- ' |: n# ]/ A' D3 g1 x
- }8 E4 E6 W) N! Z Z& G# o
- }
- * O0 y9 i/ D6 H7 c7 t
- }
- , b/ {$ f0 ~; H: d
- & |\\" d! V5 e. p! W# o, }
- 1 w. S9 [! \4 Y+ l+ m: Q6 y; X& r$ I
- 0 f1 f8 _, F, u; `% Z
- (4)添加图片
- 9 p; ^2 Y* w. Y9 w! W4 u
- - K$ r4 ^: W$ A$ |* r/ p _- L
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- 9 q1 N/ z2 R% F3 v( {/ r
- 0 d, z2 B! i; X. X8 q- H7 K* ~ S
- . h7 P- X, Q( l1 I
- //在工作表中添加图片
- ! S. A/ G+ D! I$ T1 i# A+ f
- 5 |) W$ Y) W% X7 P
- package handleimage;
- 7 p J* l\\" {% m+ J6 J
- \\" ~. T8 s2 W9 B
- import java.io.*;( f: U' L3 I# z2 X/ K+ R
- import jxl.*;
- ) [ t9 ?2 {% o, t( k1 B& J! `8 s
- import jxl.write.*;! n$ U1 ? z5 ~& p0 L. s* N# O* L
- $ G8 l$ `0 c) Y
- public class CreateImage {
- 9 ~; j; Q6 H5 s0 t& v9 m+ X
- public static void main(String [] args){
- * K2 G/ y, B$ ^. e/ r
- try{: d( ?4 X, V+ @- L8 n
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- 8 z6 t2 t4 M! Q( d$ X
- WritableSheet sheet = book.createSheet("第一页", 0);
- 6 u( D C$ ^! c
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式; L: I! `6 j' E4 b; s0 ~
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));; [- Y\\" \. {8 u6 B. ?. n
- sheet.addImage(image); //添加图片
- + o: ~6 @4 @7 p\\" {\\" j+ x4 u
-
- 1 c: W: H3 Y+ o8 c( J9 N' [. K
- book.write();
- 0 x! l' {: J( o4 A9 C; l$ b( G
- book.close();
- 3 H( Y\\" G# q* g( q D5 O\\" M9 `
- }//end try
- 3 e, V\\" v( X, G: {1 m\\" r+ Z% N; b
- catch (Exception e){ e.printStackTrace(); }
- 7 R, I& t3 f: Y9 G+ s
- }1 Y% f# Z5 h# G' f
- }
- $ X\\" y( W2 ` H
|
zan
|