- 在线时间
- 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 P1 M# z' v* b) w% N$ F9 ?
- 7 L7 A3 \2 f* n8 E! d z |
- 1、环境配置; D: U( o0 Z1 n, Z
- 6 n, P1 m. Z/ k1 ^
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- * G r/ d, e+ M+ E7 m. l6 [. _8 ^4 l
- * h; { B7 U8 U1 K+ d
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- & A\\" w3 O- A! U, R
- * E' a; K6 U1 _6 C
- (1)jxl.jar —— JExcelAPI 函数库;6 z# Q% t! r/ N5 }8 |* g* z
- 7 `# ^+ d) C. E\\" u6 @% v; I
- (2)docs —— 帮助文档;
- 0 Q8 s$ k- F! W! b# O\\" V* W
- 8 X; k6 b9 ` B% T8 z: u
- (3)src —— 源码文件夹;
- . r0 i9 C% C# I1 b4 C# @, R$ A
- L% ?8 `1 j) ]' a+ Q
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- 8 i, {# Q- d9 V) L# a! n7 H3 j8 w) r
- 0 e: w/ `' u4 {/ T
- 2、Excel基础操作实例) E% b. g- {$ z$ [5 O& }3 I
- 1 K' `, }9 n2 B w3 w8 L+ {
- (1) 创建Excel文件 8 z) k! T+ Y( f' \. F4 D$ f
- 2 s1 |7 u; V* q- \2 o x( _0 z
- /**读取Excel文件的内容 ! j' W( \\\" b! h' p4 W j' f
- * @param file 待读取的文件
- 3 d) S6 V8 o$ d, T2 L
- * @return // 生成Excel的类 */' S6 |8 Q5 P/ [ z
- package createxls;6 j6 `2 j+ |! _/ N& p) F1 `
- ! f# x( ]9 M; O
- import java.io.File;
- ; t0 h7 C7 w3 M T
-
- $ m5 {: }* A9 W
- import jxl.Workbook; ! S6 K: V! p2 B$ m\\" x: I! w
- import jxl.write.Label; . _; g9 l) p, B0 f* w, l# {1 x' P
- import jxl.write.WritableSheet;
- 9 _: {. O K6 x: n' j. O, h) r4 [. R) |
- import jxl.write.WritableWorkbook; : Z+ C: Y3 n/ E/ \$ N* K& u: a
- 4 K' a: L) |1 i4 d
- public class CreateXLS {
- $ T/ j( B3 M' u) q+ C
- public static void main(String args[]) { ( s) i0 ?+ \- m' P5 p
- try {
- % \\\" j* y6 Z( \2 f
- // 打开文件 9 J0 ]. u\\" i' u& |5 @\\" H
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- 8 O: v7 l# n0 p6 b8 ]\\" R+ m
- // 生成名为“第一页”的工作表,参数0表示这是第一页 & N! H4 b- z: Q8 d; ?7 y+ P
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); 5 V' _. d8 g1 x/ t( l
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) & {' i& E9 y {- H3 {
- // 以及单元格内容为test 4 W8 h; ?$ t$ w
- Label label = new Label( 0 , 0 , " test " ); 4 A q1 z# b+ w( ]4 ^
-
- 7 [. d2 P9 K. h5 O
- // 将定义好的单元格添加到工作表中 0 m. C6 }* ~/ f* |( @% s
- sheet.addCell(label); # N1 \, L# @; q( T
- # z4 T9 w' m$ Z3 `9 j/ t4 E* U
- // 写入数据并关闭文件 ! t0 q3 F* b) z
- book.write(); * q9 ^ ^8 b) _8 H4 d
- book.close(); 0 K\\" j$ T* D6 L. A
- ' M0 |( e\\" d' v! G( M
- } catch (Exception e) { 6 i/ W0 e5 {' v; ?# t; s9 c
- System.out.println(e); . D1 y9 l+ E& a/ x+ ]9 w% u* l
- }
- $ L& D* b7 Z+ r J2 X% v; q6 H
- } 5 A1 g, o9 d# z( q S
- }
- , x. N9 ?+ h5 m& u6 {; j+ Q% Z\\" {
- 0 t- w! o) s4 X0 A# \\\" z; E' G
- , R% W& _\\" {6 `5 K1 A
- * L8 q1 {# P( Y. N/ r) d
- (2)读Excel文件+ c\\" {* c' p3 a5 i
- 3 M) ^2 j: s- |
- * n* n/ ~* T7 l5 X F+ H
- package readxls;
- & f8 w: k w- A
- 1 p8 P: x: \\\" H4 n\\" a
- //读取Excel的类
- ! f' P* m8 c9 z0 C: u# o
- import java.io.File;
- * r- Q& |2 y+ t0 _! @
- 2 d0 P% M# [, Z4 I; g0 @
- import jxl.Cell; % C) w' S\\" L( E7 a$ C9 w$ v5 \0 x; {
- import jxl.Sheet;
- . \# b\\" ]/ A9 _4 Q
- import jxl.Workbook; 5 r6 L6 A: P/ R3 f5 j1 Q# |% y
-
- ) E' V\\" A5 I7 T& T2 m
- public class ReadXLS {
- 9 o- f& `+ M; H. g2 ^, q\\" K
- public static void main(String args[]) {
- * G6 V) e* B* h% w# W0 u) p9 ?
- try { 7 A- n1 V1 f+ a3 j) _% ~& C% `
- Workbook book = Workbook.getWorkbook( new File( " test.xls " )); - i1 u4 g( g: g! T6 R! c9 e
- // 获得第一个工作表对象
- + e6 j4 R- M9 K6 ^* b
- Sheet sheet = book.getSheet( 0 );
- 3 Y$ M/ \- ], `
- // 得到第一列第一行的单元格 . `) m9 ~$ l. R- |( j7 U9 j# p
- Cell cell1 = sheet.getCell( 0 , 0 );
- - |( N! Z0 C4 j6 n, A; p0 Y$ a. ]
- String result = cell1.getContents(); . M( _) I; R- U# W7 a# w
- System.out.println(result); 6 v; h* z1 d/ d/ P5 @1 ^) M
- book.close();
- ; V3 r7 g8 m* `! c! L; c0 Y
- } catch (Exception e) {
- 8 r+ @5 k, s: ^
- //System.out.println(e); - [& w9 B5 c7 U1 {
- e.printStackTrace();
- 2 I3 t. D3 Z' u
- }
- ) z\\" a. n/ Q3 C& f2 X( v# {
- }
- 2 n! A2 Q# y, [6 V3 h8 F
- }! f. ^2 c# U1 Q4 t+ i0 K
- : D4 G1 z0 u' B7 e J\\" d$ y0 J# n
- ' z; c) x$ Z# F9 @0 f C
-
- B) G7 q$ R2 e3 ~1 H8 n
- \\" X. e! P' ]: |3 H
- (3)合并单元格、格式化单元格等 x# i8 f3 O6 N9 ~' t5 c\\" p
- - w; F$ R5 q0 S( p
- 2 q7 p- r/ o' w0 D: a& d\\" g
- //合并单元格并在单元格中输入内容
- ! v) F; J; @* t/ E0 h1 e) }4 W6 k
- $ P$ Q' d( t! d8 L+ f
- package additionalproperty;& {' q* O- y- Y7 g ?5 F- g& i! l
- ) ^$ ~4 n9 @# p\\" n
- import java.io.*;) { O) G' Z+ R/ N( K0 j' V
- import jxl.write.*;
- ( Y0 n1 s4 o0 |
- import jxl.*;
- 9 z/ y; X* h6 m! _
- 7 X e' D) d) Y( D+ r, p/ W1 p
- public class MergeCells {
- ) d T! m+ i2 R! g! F
- public static void main(String [] args){% e `+ f2 e) Y) {
- try{
- : j\\" R4 \# p- q8 }8 e/ ~
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- 1 y1 h* k/ U2 A& Y+ \
- WritableSheet sheet = book.createSheet("第一页", 0);! R4 {0 a' j% P1 D' s( d
- sheet.mergeCells(3, 3, 6, 6); //合并单元格- h9 V8 i. e, B, e3 S: g
- 2 Z/ ?: P. G5 U! T7 B\\" y+ L
- //设置填充内容的格式
- 8 h C) Y u- o3 t+ r
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);: g! `! G2 w% Z9 j* }* z
- WritableCellFormat format = new WritableCellFormat(font);) M\\" s9 a' `% K% q1 `$ G# q6 @\\" G8 N
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
- - w, w7 j$ w6 ?
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
- + ]& Q0 i7 n g _8 P+ h
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式2 v1 x* O, h8 J. I( F {
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- ) W1 R( ]8 X# D8 D: F/ E# W
-
- : G4 a- K5 }2 J1 z2 e- ?8 F
- Label label = new Label(3, 3, "合并", format); //添加内容! n. S7 l. R5 b
- sheet.addCell(label);
- ' D5 y8 h) m+ `$ u8 R7 |' W- k
- book.write();5 }' y+ m2 z% R4 \6 Y
- book.close();
- 0 n+ x% w, D. T* D0 o
- }//end try
- & b% J# @( z* i- b) k+ I
- catch (Exception e){ G3 u/ I4 l# u+ o
- e.printStackTrace();
- ' D9 D) A; N8 E' B; v; }7 k
- }
- t# s% d: Z0 p6 g( g5 }: U! ^
- }$ `( |* z' j9 X) z v7 s3 O2 D
- }
- - ?1 f) j- O9 O! ]3 U
- ) j) D\\" r$ C& b, l, h, F3 J7 R4 O
- % t9 e' E! e2 T3 d\\" o3 D
- * d) u/ ~2 `9 v0 A0 K
- (4)添加图片
- 7 e7 r\\" c; r' y& A5 i8 i
- + `6 E: B7 F- Y* B
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。0 q0 V: t: P8 r
- 3 d6 a: J- l5 u/ V- x
- - r. ^0 {8 v6 p2 W
- //在工作表中添加图片) m+ E+ C9 q3 h. ]! m6 D3 m
- 2 b5 [6 s6 v5 N; |2 t8 \
- package handleimage;
- 3 _' U, \' P( p8 R1 k3 p/ b
- ; u/ E4 X) R5 Z( p; ?\\" K8 Y& f
- import java.io.*;
- 1 d4 E+ ~# @+ y0 F* D
- import jxl.*;) \- L' l5 \2 P3 L! H
- import jxl.write.*;! m/ O, {5 R# H: i* U/ ^% T! N7 Z
- : }9 D0 _+ D* c
- public class CreateImage {$ U1 W) g! h5 }9 K\\" c( M. h: c/ w- `
- public static void main(String [] args){/ L1 _2 N0 U\\" ^\\" q# J5 l- n+ e7 [: i
- try{
- $ s U) o s/ v' R
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- 5 Y( x/ H0 J- Z% h; {
- WritableSheet sheet = book.createSheet("第一页", 0);\\" y+ Y. s m; N+ }& a/ o- z
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式* U\\" O; ~$ F. i0 k. Q/ T d1 B' c' `
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- % k& L# G( Y3 w2 w# T1 S
- sheet.addImage(image); //添加图片/ z' s( E% r1 m5 g
- 3 N5 V( X( k9 G. [3 g
- book.write();! Y0 Q7 D: P6 B\\" t8 _6 c$ x) d
- book.close();+ Z# c8 K, G0 p$ b: [0 h% ?\\" T3 l
- }//end try
- 4 @: T% F9 L# z/ e5 s* f4 j1 H
- catch (Exception e){ e.printStackTrace(); }
- 1 a5 c, `4 f0 |% w, w3 I8 U# Q
- }: C1 ~ `\\" D2 T
- }
- 0 X$ I6 R8 H6 [( ?, l7 n
|
zan
|