在线时间 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的使用方法。* [9 G7 c# I\\" k' b' i! v6 S
/ P4 h9 }6 L5 n: J+ H 1、环境配置5 U/ V) C9 \3 o) o& f# \
v7 r4 Z\\" o& V* ^\\" r* F& V\\" D
如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
; d- L2 L( l9 t% Y\\" ]) f& y # D9 v* @- w6 t2 A# j
下载完成的包解压之后,可以得到如下几个重要的文件:) [& k8 Z, E' x ?0 Q6 c) B! u! L
, ~\\" p- a- a# {& s4 n$ Q* W/ `$ a% T (1)jxl.jar —— JExcelAPI 函数库;
* k: I1 ~( f. B
- E9 \% M0 H& j, j& S (2)docs —— 帮助文档;
$ j7 ?: ^: |0 o% W w# {, b5 T
7 {2 k7 u3 A' t$ q% M' h( b0 Q (3)src —— 源码文件夹;
/ n% {7 g: [# y: b2 n* O ; l( |! y% y& c7 i5 o' q
将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。# T, F6 F+ t/ s8 @- V( ^
$ m- X C3 P0 {
2、Excel基础操作实例\\" x/ i9 N\\" u+ O/ Q# z; j+ |) M# k& g
# L7 ~8 @+ y9 u6 \\\" _\\" @2 \
(1) 创建Excel文件 + k) F2 N2 @8 p
' k9 X9 V) O' n/ P2 x7 ]
/**读取Excel文件的内容 . b! K# E$ u) l1 A
* @param file 待读取的文件
; ]5 g* o4 G6 r5 D * @return // 生成Excel的类 */* D9 i; f) e: I! F$ b
package createxls;
+ m7 z8 a( |1 h7 b7 ?5 U7 h: C# b# w
/ X+ A$ ]+ n& M0 c2 M$ e, J import java.io.File;
4 w- R: x, H ^9 h; R5 @0 l B* a* d/ t3 T7 M$ ]
import jxl.Workbook; : }& L) O7 l ~3 \2 m% p
import jxl.write.Label;
* C' H N4 z z: I) y: x6 X import jxl.write.WritableSheet; ' F: o% b5 D! o# n
import jxl.write.WritableWorkbook; ) p/ v$ T! F/ P4 t/ a
3 [! S; W; I# O* A3 }6 o' B1 s a4 P public class CreateXLS { % N& U1 F& \* C9 A7 O# s
public static void main(String args[]) {
/ y( k5 C+ B: `+ V5 J& w try { ; `& K5 T1 X5 r+ q N/ t
// 打开文件 . ~# F c1 O# K5 B G5 k7 e3 d2 ]
WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); # x! a( c+ [6 }
// 生成名为“第一页”的工作表,参数0表示这是第一页
; ?& j9 T5 ~+ x; J$ Y9 l8 s WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); @$ v! x, A2 [: b
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) , n+ Q4 `- r5 X6 u! e
// 以及单元格内容为test \\" I/ g/ n! N( m, B
Label label = new Label( 0 , 0 , " test " );
/ `* @7 ]: K7 |* D 6 J8 s8 d6 T$ S6 n* v/ T5 \
// 将定义好的单元格添加到工作表中 7 t: s# s\\" h9 E- ?
sheet.addCell(label); 1 n- {) H( U! l2 G4 w9 }
x3 n7 {- Z' u4 ?& t2 E* L // 写入数据并关闭文件 1 J. f( {1 J3 G8 ~( j
book.write();
p\\" J$ b% B! g book.close(); 0 D8 X, n/ g; W8 w. b$ p
- A. S/ _6 ?3 I5 a
} catch (Exception e) {
$ M* E- p% H4 ?$ }+ h- f2 @8 G System.out.println(e); * w9 i) s% n% H8 K; ~! U( T, B( Y
} 6 v+ M+ f V8 Q+ v
} 4 ^: K\\" |6 @! q
}
6 R. x4 z( B' S. Y
( m# M7 Z% Z% A& |! A/ x: c& y 1 v( f1 E- _- L& |( d: _ [
* @$ b: v0 I; Q8 e\\" Q- @ (2)读Excel文件
; Y- Y\\" S5 W, a' I 7 I0 F2 N: @4 v2 W
6 h0 s3 X B\\" V, D( u- N package readxls;
; j: U9 G0 \3 Z
7 `' G! u- H- q\\" ]' ~% R$ I //读取Excel的类
$ d l8 q( |# U$ @2 q2 V import java.io.File;
% g% `, J, h5 } @. k o 9 i0 e# ?4 ~) g a3 r. l
import jxl.Cell;
4 x' }( M ?3 f3 Q4 V0 m import jxl.Sheet; - Y# o( v* B- P; X
import jxl.Workbook; 2 p2 E1 q; I8 `( b& l! l* x3 i
- P/ u7 `0 t+ v- ]2 d4 y# S public class ReadXLS { % u2 H4 ]* N7 z: t1 e/ E! w
public static void main(String args[]) {
. K a4 N, K# ] try {
. X' z! v5 x) {+ b* |# `; R Workbook book = Workbook.getWorkbook( new File( " test.xls " )); # ^( k/ u5 ]. Z, d! R7 E\\" Q) N
// 获得第一个工作表对象 3 W' H. x5 F. J& ^: |+ K7 @
Sheet sheet = book.getSheet( 0 ); ! F1 K/ e: @1 W, _4 h8 \9 p0 L$ k
// 得到第一列第一行的单元格 8 R1 Y8 A/ F! y8 A3 D1 F
Cell cell1 = sheet.getCell( 0 , 0 );
% P: X& v- Z# ]1 \: u2 q3 E String result = cell1.getContents();
5 I; B2 ]& Z8 \) B System.out.println(result); 4 `0 T5 d% s\\" Q1 a# u\\" a% \, H/ F* B
book.close(); + k& `\\" N+ J; K# F5 |
} catch (Exception e) {
$ ?2 M9 |0 p0 L\\" b\\" ^ //System.out.println(e);
6 X: R$ p/ ]! k# R- c/ n& U e.printStackTrace();# D4 N& D* k; ~$ ?. o+ V) t
}
# \: e9 O- o\\" }) G }
% B& H1 n6 ~\\" q, @ }. L. {- {# w* U, M
1 Y. a5 r, g\\" |. G `$ @
7 F% \- J& Z- e. {1 l& B
$ v2 W9 `4 B u6 ^+ f3 M 8 J+ e V& E0 Z5 x; v* i
(3)合并单元格、格式化单元格等% J, h: _: C) J; L% @) j6 @
3 S8 }3 R# h q+ t. j. Y
! V\\" O: g# x( r. q3 M4 @# j6 Y
//合并单元格并在单元格中输入内容
o8 H U+ V2 g* Y; o6 _: G $ g! w1 ^7 c8 H+ U, K/ p/ N$ G* Z
package additionalproperty;. o0 u' [7 ~( f& L! |; ?: u
. |1 Z6 u' c7 I, r& y' H: }
import java.io.*;$ o9 q. I! v0 \% e# s) J
import jxl.write.*;\\" D; k7 E\\" V: G; v: G' n
import jxl.*;* }4 H3 c3 @! X. e' x! g! g
) e6 _3 m9 N0 V' y; A
public class MergeCells {
0 [# X8 s% J3 K2 v# N# F% z public static void main(String [] args){1 d c3 N1 n9 n& I; C% T5 {* g
try{
& H A' n\\" v. Y+ O1 F3 j WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
8 Z+ @1 n6 h+ D2 D9 p WritableSheet sheet = book.createSheet("第一页", 0);
: U( T. K! g E ~% ?: X& d sheet.mergeCells(3, 3, 6, 6); //合并单元格: a' |) |. l8 W) g! e
: `& g0 q$ k6 A0 r\\" U& A: ? S //设置填充内容的格式2 ^( K; v0 K: k
WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
/ R* R2 E+ r0 [$ ^ WritableCellFormat format = new WritableCellFormat(font);
; j$ c0 V\\" K- ~7 a6 l2 k format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中: x( ?7 B; x$ y* \. y
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
/ D\\" n5 e3 h d7 X; D format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
* d6 ?' x4 R3 v+ V8 x+ p format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
( V6 X& V% l0 M4 Q% M7 w# j3 Y 0 B3 g' p% k. |+ f
Label label = new Label(3, 3, "合并", format); //添加内容
; [6 t. I# g0 e4 P\\" ?( v sheet.addCell(label);
2 M7 c- G, @- n: M# P book.write();
4 q8 z3 g+ |/ g# Q: J E book.close();6 }( T( ]& X4 Q% g& l4 d, H. O! P+ t
}//end try7 e% j5 g% _( V# a) f; O' S
catch (Exception e){* m! B) |( n# j. U& D) m; L8 N8 G) r
e.printStackTrace();/ G8 `+ P& o: u. Z& Z
}9 r3 R: @\\" J& b& U0 }
}
) ?) [1 U, _. k6 ] {. R }
. k: V$ ]/ u, H& X
- }: v. k! q! K- I7 G1 V ) K+ W1 V: c; p4 ?& b
7 g' [1 R, ]- D, a; v
(4)添加图片
) d% G: M0 J1 x * r4 Q0 O. p/ a @% S2 ~
JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
% ~9 a0 w# w1 R4 |
\\" L' e1 u; Q, l, B! ^! J0 t4 g- }
: n( l- l\\" s8 n //在工作表中添加图片$ @1 K6 M; @9 x6 V% [! Y7 W
, g\\" B. I) }7 k- S* x/ U# f2 y, i
package handleimage;: Z5 v: p+ H0 @2 O1 q
\\" h! f9 D& |' R% ~
import java.io.*;
0 i\\" @% y- e- g; w9 d% m0 @: p/ n import jxl.*;
' C5 O0 e% K. e D import jxl.write.*;! \6 d7 x4 {& Q4 T
L8 Y( m+ X& O) B) A( _/ G
public class CreateImage {
% |$ Z; B% b6 G8 D3 V public static void main(String [] args){( m0 f4 E; @ ^8 Q
try{% a$ q$ t6 e# D$ \( B
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
6 |4 @* r2 [- O9 A# B' N( v WritableSheet sheet = book.createSheet("第一页", 0);: X4 K( {/ j5 g2 N4 C
WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式/ j! \! g4 k, m5 z0 {! a* V
new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));' a' `3 ^% W& E$ t) Z3 V9 @2 ?
sheet.addImage(image); //添加图片- Z+ ^7 W; R0 K\\" J4 o
# Z\\" k7 m$ T) Q book.write();
/ I6 c) Q$ l% p$ V5 A; }' p2 J8 R; g# H' w book.close();; k$ }) D r0 u& s' y* o
}//end try, L! ?( u+ n- Z3 Y# Z- j
catch (Exception e){ e.printStackTrace(); }3 q4 P/ S1 W+ ^ c! q
}
3 N- O- ]' u7 ]/ I! M }' [+ Y/ j! S: D: C5 `
zan