在线时间 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的使用方法。. w* Q7 [$ ?; q f2 \4 H6 e
- F% w& o; d% L& _ 1、环境配置0 V( L- b1 D6 G1 J' f9 Y
* \* [1 Y4 E# A\\" Y5 [# k; n% Q 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html3 Z: e6 i k3 \1 l
$ ?0 |* P# |2 L' g 下载完成的包解压之后,可以得到如下几个重要的文件:% W, ?0 U6 R) t4 }/ H! F
( X4 l' J6 d! w# ]9 F& h; D8 U (1)jxl.jar —— JExcelAPI 函数库;
: o' J! x% H: A, W, V p
/ D+ p0 Y) U& l\\" |9 R c P Q' T! x2 J (2)docs —— 帮助文档;4 N3 g0 l6 t' h9 ]* _: f
- V& m! u! V' H\\" O8 h( x @ (3)src —— 源码文件夹;* O: l2 g3 u' r- E% c3 u8 H w
* F9 N\\" m- W+ G$ y2 x
将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。' A$ i1 Y% k5 Y R
$ f7 j: y9 C/ C4 ?& U 2、Excel基础操作实例5 e& k9 S6 H2 v1 b( B
% n+ H' w3 W6 W8 ]4 k! r1 c: f
(1) 创建Excel文件
1 f1 R; d0 r6 V
; V4 s9 O |- k7 m# w1 R7 v /**读取Excel文件的内容 4 K J& T4 Q4 q6 A9 g: Z
* @param file 待读取的文件 7 C' J! d6 n& \2 N\\" V& f/ E
* @return // 生成Excel的类 */+ m& u1 o' W, B. v
package createxls;
8 F: S; }$ E$ k. R; S # E: m* w d- u; K\\" K
import java.io.File;
; p: R1 @0 P$ u' T
- O7 r f9 Z\\" y! r import jxl.Workbook; ( J( `# }1 C; j( C3 J+ L Q2 C\\" o
import jxl.write.Label;
& }\\" F; F! U+ Q\\" q\\" w\\" L\\" B0 T import jxl.write.WritableSheet; 8 _' S' B' u, O2 Q
import jxl.write.WritableWorkbook;
2 K; s* E9 m0 c+ |
0 \+ y( L+ `! T! g, `4 r public class CreateXLS {
3 u% z$ ?- l5 y T' r; q public static void main(String args[]) { . e9 v& ^. U\\" F% Z$ f2 Z\\" u) a7 y. [8 |
try {
% q1 D( @! ?) l0 ` // 打开文件
0 _; D& P4 a* @ WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
0 [; R% G& n/ @% y\\" ^ // 生成名为“第一页”的工作表,参数0表示这是第一页 3 t. P, v) j1 [\\" V
WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
& {5 P. ]( r) q) ` // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) 0 X+ s/ _- \& H8 F
// 以及单元格内容为test
( v& g\\" H- R0 u* ?) T) P Label label = new Label( 0 , 0 , " test " );
7 x% m/ q' X5 U\\" K+ _ ( G& i) }3 k- ?* D4 x1 Y, w
// 将定义好的单元格添加到工作表中
' s/ G\\" ~0 |5 D0 g9 @ sheet.addCell(label);
* M- F/ K- }4 H, s
4 O\\" Z: `+ S4 y( [- F) H! ?\\" Q // 写入数据并关闭文件
: T e) k1 ^( o8 V0 X1 Z1 B; ? book.write();
: u) ?3 f4 B% f+ S+ J! e7 t; f7 G book.close(); + `& N9 \, c7 E: Z+ G% k a
% Z6 m7 p5 {. ^( E# p. q/ O
} catch (Exception e) {
\\" c+ F: |* S\\" w8 [1 I System.out.println(e);
8 n. \) P2 t( Q R& Z$ g# O } ' {9 S/ ?- ]% ?# \, q, ^/ E: ]+ U
} 3 x% M5 C; V4 p4 V# f
}
; _; ~$ T/ G/ c: t+ i' y / q8 w\\" W8 E$ e$ f: ^6 y& O\\" D
9 e4 m/ E& l& r\\" I% t
! i+ n\\" N' ?1 B5 B. q7 |
(2)读Excel文件5 v! ]+ E; p& V; \
. B( J. _, B- D9 x N# S
! q. r, h y5 G' J. p package readxls;& @# Q( e6 I+ T\\" p! U' d
6 ~8 M( J2 j7 T //读取Excel的类 \\" h% C\\" a9 O$ K% w+ W' S
import java.io.File;
2 b) U& H9 D7 w* N
: A: v* C7 R. ^1 t import jxl.Cell; : i- Y& V% S; [7 b! G
import jxl.Sheet;
' k! D6 n# k1 o* [ import jxl.Workbook;
8 T/ w: l\\" C% Y8 c5 x
! ~6 o6 r( G, A' ? w2 \- j public class ReadXLS {
* z! \5 j+ `( i\\" |2 B3 U public static void main(String args[]) {
# M k2 ^5 p. i6 J try {
0 b& @% E% ~) x\\" {& M3 K# ? Workbook book = Workbook.getWorkbook( new File( " test.xls " )); : n\\" _* g' q) Q8 D4 M
// 获得第一个工作表对象 ) n4 E( A2 G4 a
Sheet sheet = book.getSheet( 0 ); % H9 B% n/ }. h
// 得到第一列第一行的单元格 0 l7 J+ ?/ z* s; l
Cell cell1 = sheet.getCell( 0 , 0 ); 0 s8 R% s7 l8 @1 Z8 a
String result = cell1.getContents();
* U0 r! ?+ s8 z& Q% }# w$ W8 G/ j System.out.println(result);
; l) O% w2 n- a book.close();
/ x6 i4 n\\" z4 R. { h( p1 L$ P- J, H } catch (Exception e) { 9 `3 j( `2 v6 y' F
//System.out.println(e); % I$ Q8 {' e2 ~\\" u1 y
e.printStackTrace();
) o9 l& \6 Z$ |7 U }
2 |! r8 A& l4 C: y/ e } ) ]# A$ Z$ X, s' o& M1 v: p
}
* A4 _0 a A/ b6 m9 e, \' k
+ F- X# y# N\\" l* J) m \\" @' ~7 A+ Z5 i3 i. l
0 N3 e- P3 T1 }! N ^3 c\\" c8 s- L& H) n6 J
5 ?' n1 Y3 C4 K s; m (3)合并单元格、格式化单元格等
# x1 R; z\\" y$ `
# ^ t n+ J$ M0 Q+ z7 E8 ^1 W# Y ! u$ F# `8 Q8 `& u. v
//合并单元格并在单元格中输入内容$ s4 G\\" \- n0 F, z j
4 y+ c1 J, a! q
package additionalproperty;
% |' z. ^5 F8 |8 p. k* i ; s& g+ G0 j* n: \; D
import java.io.*;
$ V. w V$ ?( ^+ h8 H) u import jxl.write.*;. Z1 R% L- r/ \8 w$ C6 `5 h2 W
import jxl.*;
u$ ]( F& c/ q! I; O
7 I6 Z5 ^/ }5 `2 {! V5 }' \ public class MergeCells {
L% Q5 O& f/ { public static void main(String [] args){
; ^( c! O# f: w# I X2 C try{
, T* y# ^4 [- o( L Q\\" I0 p# d WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));' H2 H$ Q B- @& v* S
WritableSheet sheet = book.createSheet("第一页", 0);3 z- l% [% u6 n( a( u5 V- W* X9 ~
sheet.mergeCells(3, 3, 6, 6); //合并单元格
0 n. X8 k5 D( K! C* {\\" z: v! f 7 Y- b% b/ B+ j( o4 h
//设置填充内容的格式; v9 {% q+ l# y! k7 C+ e
WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
) G5 ^. m# f9 W- f$ R1 P$ ^ WritableCellFormat format = new WritableCellFormat(font);0 ]/ W8 w- m% b- _) T- D1 c
format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中/ R. v; p5 x) M7 `( ]& [% y6 K. T
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中 ?. k# n9 m, {& ?
format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
z7 R9 |# n- k W0 ]7 _ format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式\\" Q9 U/ ^* y' M' m0 d) }. B- s
5 G' V' F: j3 ~' v\\" r* f# j, I6 F
Label label = new Label(3, 3, "合并", format); //添加内容
! p0 ]2 {8 Q2 x3 k# x sheet.addCell(label);, g8 I9 M' E4 C# K% A0 p }
book.write();. f0 v4 a8 F8 P: d1 y% b\\" T
book.close();
/ C' ]# K: G3 e, j; a0 ` }//end try
0 U6 S+ ^' o+ S6 D' g catch (Exception e){
) Y$ r* f9 p5 l# d: ?; K. F& x5 x e.printStackTrace();8 j5 {; G8 I: e, w
}
4 z8 k, H# d) D7 `3 F/ P }
- [; Q( J; _/ |; h) o\\" e }* D; [# Q3 A9 y# d& o
4 y+ m! K9 Q: x# c& {
' }# g* r) O1 O) V7 V6 e) i! ~. m , O* l; L9 R( \( `1 S3 X
(4)添加图片
; y6 n1 D/ Z# a5 i5 J) ]% f
4 x; X& U0 G# G JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。 [2 G) k$ L2 W3 o3 D+ r( y, a
4 l+ c\\" W1 G, j3 U7 h
( L$ r/ Y4 b6 L4 V6 v/ H //在工作表中添加图片
1 q. k) V5 z9 z* `4 x# O
7 b\\" L\\" k- b* J3 \- i( W package handleimage;/ j! C\\" T! k* Z
, R, X# C( Z) s% M. J2 c
import java.io.*;
9 o3 @6 |1 {- `1 x import jxl.*;4 U* _7 Y; r4 l
import jxl.write.*;
6 p. Q' |7 i$ z8 N& ^$ m
/ N& ?5 T% r! w public class CreateImage { H ~* g( L$ W7 j9 ] t j
public static void main(String [] args){: x4 L y w% c: \0 {3 W4 M, d0 e
try{ _% Q1 u/ t; Z0 ~& S% Z
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));* q7 v4 ~* J1 k7 z7 a L\\" V
WritableSheet sheet = book.createSheet("第一页", 0);
0 i: w' A s4 C WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
! h1 S\\" \: i& K new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));2 G! \4 y) _\\" j. C0 H
sheet.addImage(image); //添加图片
1 H2 E- g: U! M/ d % w* o2 a% ^1 h/ J8 i# B
book.write();
5 `& ^3 A' ]3 X/ |9 t4 n book.close();
; {% u. O) k* B5 q1 Y k0 n }//end try1 X' A8 u, `; k' b$ H
catch (Exception e){ e.printStackTrace(); }
& ~, ^\\" C% a+ L- F' U) Y3 T }
$ O) K/ M5 D\\" x/ O\\" |; o }0 J ]/ @\\" Z2 N4 k* ]- F
zan