在线时间 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- w d6 k\\" Z. V: X/ ]
* r# c R: B4 L) J 1、环境配置
0 |8 I0 U0 {\\" j& x+ ]; W
7 g: q7 Q# M0 ^4 W+ f9 j 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
. A# ?8 {; m7 D, u\\" K4 j. g+ b
: h* U9 K+ ^- n9 R 下载完成的包解压之后,可以得到如下几个重要的文件:6 o# E8 ^0 q8 r6 N: c6 x0 c7 o
) T8 {6 ~8 m1 S2 [7 W4 s1 s+ j
(1)jxl.jar —— JExcelAPI 函数库;
. z5 G4 q+ y& C\\" T
6 w0 `2 _' i+ m% m (2)docs —— 帮助文档;
) @& F2 _5 t$ d, d$ ]3 J7 s0 i
5 s+ `4 c( _5 K (3)src —— 源码文件夹;0 k- @& A* u. ~! L8 X( T
% S( `2 ^' d: \6 U 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
2 s\\" |0 R3 ]/ c
8 r. t3 d* k% Q3 a/ Z 2、Excel基础操作实例
0 d0 Y! u3 W# C5 L- i7 ? , \1 V) p' {1 [3 [. u; D1 j& J. a\\" W
(1) 创建Excel文件 3 \$ B7 D+ t. s# j7 T+ w
5 d: R% W: u# p2 w
/**读取Excel文件的内容 9 S5 M* A3 o' S( E- u
* @param file 待读取的文件
6 {; E6 v6 p5 @, H$ n- n+ C * @return // 生成Excel的类 */
, C4 M$ h! u' ], U. r& N package createxls;- ?4 L% `' ^) A7 F
7 J5 ?! c\\" y+ o% ~! A. T import java.io.File;
. E+ J' L3 g\\" l ! J/ t\\" t8 r$ a! _ ?
import jxl.Workbook;
) O( v- L! S7 q% A) E/ ~. v import jxl.write.Label;
v1 |+ C\\" P8 d) D2 V4 t- a import jxl.write.WritableSheet; / k\\" I% T, Z5 a7 w
import jxl.write.WritableWorkbook; $ ]# C1 p3 M* X
( z# S0 h: A& Z* j- Q6 l: ~ public class CreateXLS {
) i; E- Y( Z8 R+ k6 e public static void main(String args[]) {
( N+ H3 u' ]/ ]. {. W try { 5 e1 p& Y+ B* `$ r9 Y( _
// 打开文件
3 L3 c- Z6 U9 t; [+ W6 z z WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); # {6 i% ~% S# Y
// 生成名为“第一页”的工作表,参数0表示这是第一页
3 H7 I. `# F/ N$ D& i! m WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); ) I. c! c- {( I) [
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
3 f2 l9 f; \$ L+ Y, Z' T // 以及单元格内容为test % W$ ?$ Z\\" _# ~\\" P4 R2 ~0 `
Label label = new Label( 0 , 0 , " test " ); 3 Y/ w* o1 I- {' V
9 K. X8 D! f' j
// 将定义好的单元格添加到工作表中 / A. Z& L, I; [: K
sheet.addCell(label); & ^5 N) h1 S. V( L( p& E
+ ~: z/ w( [$ z9 y& K5 r- ^ // 写入数据并关闭文件 0 D$ Z! @4 n' X2 U3 o# ]
book.write(); $ F; b5 D\\" O; W8 h( r @ q
book.close();
7 C& V& |6 E5 o1 [2 S\\" L; A$ j & q0 ^) g3 @7 B% c2 b
} catch (Exception e) {
$ J, F' e- s2 P$ } System.out.println(e);
6 o- {9 H\\" k0 Z } / i% i4 I$ L) |0 J: a
}
& r\\" E1 U\\" V* m# R0 l* O/ g } $ g8 ^! A\\" H4 C7 @% @, f) X# I
8 O) Z7 m+ C: ?4 ^& W1 d+ ]2 N
4 ]5 G( ]8 t/ l* D( o- T
* o3 \% L7 I& c7 _6 w (2)读Excel文件
* p2 k$ c0 X, ?- a! k
3 o V8 G- \2 t% D\\" R % E+ D; P- r( u9 `$ p6 }
package readxls;- u( s\\" ?/ ^ v7 I
' h7 h6 K6 u! @2 u\\" e //读取Excel的类 / g5 f1 [9 ]) ^\\" r) X. f\\" ^
import java.io.File; 4 g- A. O( Q3 A# \( p6 }+ G. k( X
* P( ~) R1 E, ~1 R6 Y$ R% S
import jxl.Cell; 3 H) \4 _ [+ ]- i- e4 l- n( e
import jxl.Sheet; 1 c. t2 y, y) j; T
import jxl.Workbook;
/ t( F7 x& b8 }
\\" K0 _. |4 R& m% X2 }0 W* G4 d public class ReadXLS { 5 W8 h' d0 S& X
public static void main(String args[]) {
D0 q5 Z- u Y: v9 U' | try {
* q$ N- |4 V- P# o Workbook book = Workbook.getWorkbook( new File( " test.xls " )); 4 H\\" E: w: l. j c. w
// 获得第一个工作表对象
2 E5 p) Y5 _: c7 y) ] Sheet sheet = book.getSheet( 0 );
( P2 q+ g( D( j // 得到第一列第一行的单元格 % f* u: q3 u# W+ M% Y
Cell cell1 = sheet.getCell( 0 , 0 );
' ?\\" H5 r @8 b$ A1 g) D+ ]& O( T String result = cell1.getContents();
0 Y9 x2 w/ m' i4 ?8 m System.out.println(result);
: N; j7 `5 `& ^ n book.close(); - {: a C- O3 H
} catch (Exception e) {
2 d7 E1 f$ b5 s0 [9 H3 S$ \\\" p //System.out.println(e);
- K: ~: k: p: ?2 O2 S\\" a0 Q e.printStackTrace();) b' F( H; m4 z8 L6 D
}
3 x4 e9 Z7 r5 {9 j) K7 V7 R& @7 T }
. B/ U8 a$ E. K# a( Z a; I }
' O4 E! U1 y1 y
, E) M! s- M: U+ c# b 1 C& k; @& `3 |$ D* ^
5 g% l& v5 Y; w% o- D B
* p! I1 L9 p* H0 e\\" }9 F
(3)合并单元格、格式化单元格等
+ r' K6 R$ I, [- a
( S! f. D( Y/ N: O\\" \- L& Z! s% ? # i1 j3 l6 O4 ?- {
//合并单元格并在单元格中输入内容
1 n9 V; S( U T\\" t9 m
& T; k* D0 w; G package additionalproperty;. `: \4 R\\" B$ {3 E: c: T0 `
9 s' c: ~+ e/ E! U
import java.io.*;
]$ K/ s M1 M) z+ ], b0 w import jxl.write.*;/ T) _& `, r/ h2 O
import jxl.*;\\" r\\" ?+ z* ?- @. W) z
# L, m1 U7 z! G- P% O public class MergeCells {' h; P: L2 W- r! Y& _5 b
public static void main(String [] args){
1 k2 Q' l) A5 Y$ @# [% u% o try{
6 ?! N. L# r# m' W- L+ | WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));$ e! S2 k! U$ c5 P: ^
WritableSheet sheet = book.createSheet("第一页", 0);
- N\\" D7 J4 l& m7 y5 n& o0 ^6 _ sheet.mergeCells(3, 3, 6, 6); //合并单元格
, \( [8 A5 T! E- B& g; R; s! E
\\" v+ k; [0 o' S) Q6 @* a2 G //设置填充内容的格式% h0 k# j! L) J0 Z/ t/ h f
WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);3 ]! \ o, S1 F \4 Z6 g
WritableCellFormat format = new WritableCellFormat(font);3 z3 x+ H: o) O( O0 B& _6 V7 X0 W' W
format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中; P3 c4 m1 j! d
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
0 ?% \% m7 A9 v Q8 K/ |! ? format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
- u4 ]+ o9 W/ r+ u# u( w1 J format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式+ E) F3 r0 u$ Y\\" u7 `. B
: J* s3 Q |5 a6 M; F8 { k+ L2 m9 D
Label label = new Label(3, 3, "合并", format); //添加内容: e& @& f- r$ S# m: a
sheet.addCell(label);: L0 i% A9 ^; i' a, o9 b
book.write();- r6 R6 u9 G- J
book.close();
1 Q& @' C) f! b\\" k }//end try
\\" d+ N2 B: g% y6 F4 ~9 x' J\\" D/ _& _! O catch (Exception e){+ J2 m: Y7 D3 J, X+ E' ?8 g. W$ w! U6 j
e.printStackTrace();
) E. V) i- W/ R }/ D% y }4 F- }1 j! i7 P6 Q) p- E
}
. V: C0 e% C7 ` }
$ Q, A* \\\" V3 a\\" b; r $ c: e4 v# J) k# Z
7 k) E4 e! G4 ~ ; `* T5 Y k; H) g3 X
(4)添加图片4 [3 a8 v% a1 R) ^, }
5 n1 R6 W( o\\" w JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
: i- o L* o6 h- ]4 c5 Y2 S' `2 N
: \, t$ m6 H0 Q + a: Z6 X4 \\\" v\\" r; o$ K/ q
//在工作表中添加图片! O7 o% g# D2 C' G
. R, ]3 I5 I, Q7 V9 k package handleimage;6 K# l\\" H) N- h
% _2 Z) H) K5 y: x+ F import java.io.*;3 k$ g5 D' E: x! ?1 q8 }4 y3 G. o
import jxl.*;& k% O1 S, z- f; o- }
import jxl.write.*;
2 @% q8 x7 Y% j' b\\" u) H( z $ P0 P- N7 x v& z
public class CreateImage {, J8 R' [) \8 ]3 s, w r* c/ i
public static void main(String [] args){
3 \: P& b% m+ J7 b$ B3 s. X2 g Q try{
! d1 v( N/ E2 @\\" a& y5 ~7 c WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));8 U0 @8 z$ e9 F# K3 j6 U+ k+ s
WritableSheet sheet = book.createSheet("第一页", 0);; R/ d\\" @- \ ^- @7 @& L( _* a3 N
WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
# }8 R* _\\" B2 m+ m0 [9 A, T% { new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
; L9 h3 G\\" u4 F* a sheet.addImage(image); //添加图片0 h5 ` |+ _5 _( i\\" [6 i
( ? a: O) }- `( k book.write();9 w z) g) a+ N7 A5 E
book.close();
* k\\" q; |2 c& {( d6 S }//end try
) T$ U9 `# T) c9 Y0 [ catch (Exception e){ e.printStackTrace(); }% k2 O& s\\" [7 m5 F+ o; t1 d
}
5 L1 T& O4 P1 T4 }7 } }! q+ E/ h2 p# c6 i8 Y* ?' v9 X& X
zan