在线时间 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的使用方法。# o3 H9 `! `+ |) S. e
k& E# y3 q1 M 1、环境配置
4 p* k' Q/ m5 C9 M+ [. c) E
7 E5 _1 Q3 k w 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html3 N6 K+ q( h5 ?
0 R\\" c/ w& `$ a% Z4 K\\" x# Y
下载完成的包解压之后,可以得到如下几个重要的文件:
7 j+ L) o8 J' D2 w! k 2 h+ Q2 ?& m\\" h( d5 u\\" ^& i
(1)jxl.jar —— JExcelAPI 函数库;4 {5 e+ O8 \$ g! w
+ \2 C2 `' p\\" O2 [
(2)docs —— 帮助文档;
1 x' R2 a v; W
; \5 X Z' ?7 w (3)src —— 源码文件夹;
8 \! d g' v% ]4 w2 o+ c# }% R( } $ \. q3 e8 }$ K3 J' l\\" p
将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
3 F9 K2 t( v: X1 a9 [( I* T
# z2 |! N3 K+ O 2、Excel基础操作实例
, G( H- O; [! [' l1 ]: V1 o
8 e- J2 g0 U: b: X (1) 创建Excel文件 ! U* x5 M$ E\\" w5 _9 G3 ^
( \. \. W5 l, j7 b7 c! | /**读取Excel文件的内容
* B+ k2 f; y; o$ F# e * @param file 待读取的文件 ) j+ L6 E: K. L8 _
* @return // 生成Excel的类 *// T) O8 ~1 P* b( b
package createxls;
1 \- S8 h: c# C& g7 |3 Z. Z6 i
: H\\" h, V+ U$ d9 @# C( K c2 N# M$ _8 A import java.io.File; ) S3 y0 j3 Y- o8 f* N* J
8 A6 T+ Q\\" f0 f
import jxl.Workbook;
0 Z+ t* w' E# K! f7 o import jxl.write.Label; 3 v* {, g: `8 ~9 e0 E
import jxl.write.WritableSheet;
$ g% P) j! o( P; v( U import jxl.write.WritableWorkbook;
( d) I I/ E% k\\" p( {& `2 T
/ K- v/ P( p# ~5 d) H0 b: I/ N# _ public class CreateXLS {
/ i) P+ |4 j/ ?/ G# A r\\" X7 F public static void main(String args[]) { ; u\\" p# r' J* L; n
try { ; K, f6 _- Z4 v& _; b
// 打开文件 ! b3 f# L# N A
WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); + [ X\\" S* X+ V
// 生成名为“第一页”的工作表,参数0表示这是第一页
# X+ X& z: B6 }* t: N0 M WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); 4 X4 }4 d$ B Z; G. d2 L\\" U
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
7 N# a6 k& R1 i$ H // 以及单元格内容为test 6 U* O+ E! j# @' n& t0 f+ e, e4 t
Label label = new Label( 0 , 0 , " test " ); ) [/ [: w% x% [; m [
- a2 T9 C1 m\\" m; H // 将定义好的单元格添加到工作表中
9 ~% q\\" Z3 f& d sheet.addCell(label); 1 f% c! k& s( ]
5 M' {! k+ |; V2 g // 写入数据并关闭文件
1 K+ Y. K. K$ F* |5 s book.write(); ) u2 A8 r# X7 G$ \! Q. R- [9 z
book.close(); 9 A4 @. ], f! Q; O; J$ Z0 ?\\" @! `
5 ]) X; l& k4 f, H3 m
} catch (Exception e) { 0 d9 S5 \+ t9 Q* W5 E8 A
System.out.println(e);
- x/ y$ o) ~\\" a0 ~9 g3 v+ f } \\" T+ L( S+ m! Q$ T0 D2 o5 Y' y# b
} + c# c, ^3 s5 O\\" z: B( ?
} . ]) J\\" k8 G+ S0 W
, Q9 j+ e\\" m( a9 u+ J/ W
( s4 ^5 K( y$ D ( T2 }$ m, K) o* r
(2)读Excel文件
9 ]- F# b8 W/ P1 z: [ % \ O& U z& B7 B( V e, f
7 T1 p/ }* i- R! X
package readxls;# n/ n& j9 K E, {
6 d5 i2 c1 S1 x& f! i
//读取Excel的类
0 |* m& ]/ k+ J7 m, F1 f import java.io.File;
+ U+ B6 i. j) M\\" B
4 g$ C. H+ W9 G) h9 l. U5 C import jxl.Cell; . F* P3 d3 e C) U
import jxl.Sheet;
9 s8 o# ?5 x- c import jxl.Workbook;
0 T2 m) e. u# I5 t/ P9 Y: K; F$ S1 ]
2 k& r* F# w& {& r1 S% Z0 Y) d. A public class ReadXLS { & i! {- s) a8 `& d$ y0 u
public static void main(String args[]) { ! I3 |5 Q+ n8 U K: ?% H5 d
try {
5 B# k: N\\" B$ V Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
. Z) _$ q+ W0 |/ K. X i! ^ // 获得第一个工作表对象 ' i. }' S P: M- x% E0 d; q k
Sheet sheet = book.getSheet( 0 ); $ F8 U4 Y: V5 \$ [/ Z7 v: |
// 得到第一列第一行的单元格
# p, ~+ [& e9 R$ b( d) X Cell cell1 = sheet.getCell( 0 , 0 );
$ s) j+ ?6 r! e, a5 P& I String result = cell1.getContents(); 5 i\\" C* Z+ J5 I2 Q1 X
System.out.println(result);
! b5 X1 d8 N% x) I0 V% d. t book.close(); 2 e/ |% ]; {\\" U, W9 S T( b
} catch (Exception e) {
; z: Y\\" g4 R5 Q\\" P8 A- m3 K$ t //System.out.println(e);
* ?! d9 k\\" P6 F& l2 n2 z M! G e.printStackTrace();/ t+ S- B+ d6 x# p# x
} * m Q5 \7 T2 ]7 Q/ z9 s- _
}
6 D; _% o\\" X) ?4 B- u }& B' U* s( _& P
& a) K! I7 o: C& W
2 v1 f6 n: H: m: [) Y6 Q$ r7 u1 u
8 N5 [) c* Z6 ~. ] 6 A- X, G* m& g& K& \, x
(3)合并单元格、格式化单元格等, a8 @! g2 K8 l$ y. y
2 s+ h! J, Z0 V* x3 s
7 `9 G/ x v$ I+ @ //合并单元格并在单元格中输入内容
' Z: w ]$ O7 K
2 v s% K& w' {! N6 q8 o2 Y package additionalproperty;
, s9 k/ q. u\\" [0 T
s+ D\\" x! t7 p2 P8 b% y import java.io.*;
\\" {' \5 a/ l& x import jxl.write.*;
0 E& i* C9 Z\\" L import jxl.*;
& f8 o\\" P6 s7 C! F% T) ^* y 3 E1 o( ?# P, e
public class MergeCells {
5 y- u! O% I& @7 `! i, { public static void main(String [] args){
R% y5 d1 k: ~% o% Z try{, }& y8 U: ?3 C( {$ t6 C6 e2 O! f
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));' L+ L5 u2 O% S, v/ t\\" F
WritableSheet sheet = book.createSheet("第一页", 0);+ \' {: Z* |9 v$ E# `; g3 ^
sheet.mergeCells(3, 3, 6, 6); //合并单元格
% F6 U/ ] z) Q, o
8 v7 O2 W+ e( L* X //设置填充内容的格式6 |2 o* k: B- k2 L- a5 r( P
WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);4 X0 A& a) M4 d% t# d7 D
WritableCellFormat format = new WritableCellFormat(font);
9 c' r1 D3 q0 a; t! F/ F) a+ @ format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
5 E1 Y& t% A5 |9 {- J8 Z$ B' ]* ] format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中' _8 B+ E+ w E
format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式3 M& L0 q% A+ ]
format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式2 u# e3 ]\\" h: v6 Z( W; A) T* j
% Y, i7 I3 k+ d9 B
Label label = new Label(3, 3, "合并", format); //添加内容! i\\" V4 ]4 ?, E6 i: i4 c/ i
sheet.addCell(label);+ j- c* i6 M8 B; V
book.write();
l3 K; u6 J) b\\" B book.close();5 f* |' K+ Y1 |# s4 F
}//end try5 ?. \* _* L' u: V' L4 w
catch (Exception e){\\" D; z5 U: u S6 \
e.printStackTrace();- Z( g- a* E) k& g+ I' r
}8 N9 B5 P- ]2 w
}* H- X, ]3 ]2 j9 u# {# u2 f
}
2 a. c6 m\\" W4 s& ~7 Y
) G% @, B# J# e. O1 u ) Z+ ^. z4 W- Q) x\\" s$ f
& O8 a0 h. O% z
(4)添加图片2 E% d# R- y' j( E
K* K3 _3 s6 u2 b9 U3 K( Z& z! w JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
: p\\" ^6 X6 K, u) t7 z & ? l# K# k* t, E
+ g+ M: v* R7 W
//在工作表中添加图片
/ l+ O$ i1 ?/ J5 @0 @5 V; i; b # t l8 b; F% [. s0 n% W X7 }) _8 d
package handleimage;# K/ S% p- m4 m9 j2 w4 x
4 M' l3 Z7 K6 e) B4 L! g! Q import java.io.*;\\" M\\" @* | f* u+ \9 Z
import jxl.*;
! e7 P8 j9 F* ^9 Y import jxl.write.*;
2 s5 E) N' @( K$ P$ ?
7 R- [2 h7 J! a. V public class CreateImage {' X8 N$ R! s\\" s4 f/ M# @8 p1 O, m
public static void main(String [] args){! F% Z! f+ E! Z! Y! j1 [$ ?4 P8 p2 }
try{
3 u- M3 _, X2 t+ c7 b\\" s' D WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));$ g. x) q5 P- b: q\\" E+ y
WritableSheet sheet = book.createSheet("第一页", 0);
$ J$ u1 i\\" k- A( K: p% O' @5 q WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式\\" m5 m6 `! t1 R$ M9 _% t0 M
new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
' \5 E! u/ M# y- e2 w% a0 ` sheet.addImage(image); //添加图片
8 `\\" A# G\\" v! w% a- J $ a. o4 ?; O, p x: c# ?
book.write();4 x% @1 X7 L0 n) \5 ^
book.close();
~7 \3 F; T r. `! G* I }//end try
\\" K( t, P4 X\\" o& F8 g0 a% ^ catch (Exception e){ e.printStackTrace(); }
. v( \2 K5 S; R- Q. ~& | }
) d3 s, G5 F- {7 Y0 ` }
8 _$ k' ^- a# e. l: z3 i
zan