在线时间 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的使用方法。6 ]\\" q6 q0 r. z! M. P: Y
# H1 F7 c! p& l, f8 c. F
1、环境配置9 I8 ?1 | d; I( j5 i
+ D% ]. c( w$ M( c5 J 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
! O& _; g$ z, W. H2 m
: x3 C3 E; p/ r% n' ?0 I J 下载完成的包解压之后,可以得到如下几个重要的文件:- Z\\" F; ?6 c- G' @# W% k' {1 s
4 K3 j' q* {9 t' J (1)jxl.jar —— JExcelAPI 函数库;1 {8 a\\" r1 F6 E5 A
' J+ Q0 t\\" U$ x k; p1 k (2)docs —— 帮助文档;
5 m& F9 I1 ]+ d4 r4 d
! P0 i8 O, ~- m: {. l) n& { (3)src —— 源码文件夹;
5 z! C- u. d' c1 a! `$ l\\" ]5 }7 m( X
/ u' a D- W$ A& p/ h 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。. ?8 u3 G: E1 s: s! t3 R$ M3 ^
6 a# b \% a( l5 b2 V8 X 2、Excel基础操作实例
1 P6 G( e( X7 V\\" F- Z: E \\" R6 f3 F3 J4 g\\" m3 _: E3 V\\" x
(1) 创建Excel文件 1 s4 l! x$ z6 U+ n# O( I
8 P3 `( m( {7 B) @1 n U5 _, Y; @ /**读取Excel文件的内容 8 p/ k8 z6 `& h0 i, u
* @param file 待读取的文件
6 q* L4 j# W9 {) _ * @return // 生成Excel的类 */6 ?8 D+ p( v* ^7 u/ H/ Y0 D
package createxls;1 j. @) v0 {\\" ^
0 Q. a8 z2 u; r) e import java.io.File;
% {' ]9 ?% y! E* L. W
L+ d\\" {' ?/ e% }3 n4 p0 ] import jxl.Workbook;
% L* q0 R, y7 J, `2 {$ @7 a6 T import jxl.write.Label;
* |# Q' R7 z, z: Q- p+ i0 U import jxl.write.WritableSheet;
6 @) V% i; _ t0 L! J# J import jxl.write.WritableWorkbook; 3 M\\" i' J( M ]- F8 ]+ X& k# ?
8 C& [3 D3 \' H# y7 _
public class CreateXLS { 1 O e3 _5 [$ L- D' ^
public static void main(String args[]) {
' I+ V6 d( `\\" T$ ?- _5 m. U try { 2 C5 Q/ E2 n6 {2 v\\" R5 O% r
// 打开文件 & i! ?( O e3 q. F3 V( X
WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); 9 c c+ K9 z\\" x
// 生成名为“第一页”的工作表,参数0表示这是第一页 \\" e: \1 m' Y9 k R
WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); , m x* ]( \4 v# b0 n6 l% j7 F' c
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) % c0 v' }% K U# M% ?
// 以及单元格内容为test
\\" i6 o! n7 K5 X2 k$ v Label label = new Label( 0 , 0 , " test " );
9 L8 [9 c! S& b+ k! H . S/ ~/ U/ p: o; [0 r
// 将定义好的单元格添加到工作表中 9 D+ ], F1 Q9 s1 u/ g
sheet.addCell(label); 9 |7 ? N6 t0 ~' N/ f- ?# J! x
: }# H# Z/ q, ?5 c\\" F# D3 e // 写入数据并关闭文件
- d6 P; a8 Y$ S( ]9 e/ x, @& h book.write(); 1 ^, c: `5 S7 x$ a7 t8 K
book.close();
, v, M; K1 K' t6 h1 Y2 W ! G, `( L# c' X( v9 V z& c W9 X
} catch (Exception e) { \\" C& |* J( a; w
System.out.println(e);
/ L% o; m0 J! ^ } 9 U7 F% `2 e0 f: L/ y\\" h# [9 x% K
} ( ^- ~' M; S# h
} ) F5 c9 \0 I- O) x- C
4 O& ?0 Z; A. Y r5 [ 6 g; x6 J0 d. k\\" p
8 i( C7 r+ l+ ?; Q! ?6 Y1 x
(2)读Excel文件* G: h\\" w6 C# d
& H6 r% R' Z( D; j: y
' E3 L. W+ I& W4 w+ F5 G) J package readxls;
5 ]# N5 Z3 y+ r P/ U1 u6 a ) D: L: F3 O: e) _0 |; M/ k
//读取Excel的类 & n6 J2 y; Y7 k- M7 ]$ T9 Y \
import java.io.File; + \ b0 u( }9 C* Z4 H. ^
/ r, }/ T/ G& X import jxl.Cell;
0 K# U; H' v+ m3 ?& W) N- A import jxl.Sheet; * g5 n! ?$ Z2 k: _3 G\\" g
import jxl.Workbook; 1 K9 ~0 \) F8 k8 L$ z
\\" o! b8 C2 \. f' c# {
public class ReadXLS {
$ n+ ]9 s! l E6 d7 J public static void main(String args[]) { / v- ]& M4 n$ F9 ~
try { 4 @$ d\\" |& `- w( D0 e0 I9 d5 d
Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
2 i, m1 k! U% e\\" f$ a; X // 获得第一个工作表对象
+ N0 X T0 X9 Z1 ] Sheet sheet = book.getSheet( 0 );
# E0 {1 T( L# v7 ?- [7 ~ // 得到第一列第一行的单元格 , S+ o1 S0 n6 \8 B
Cell cell1 = sheet.getCell( 0 , 0 ); 0 O! h! W& Q7 j6 h\\" g1 A- }
String result = cell1.getContents(); + ~- _; [2 p5 [6 G
System.out.println(result);
$ {3 L3 H. r\\" U! [3 o book.close();
# D& ?& j8 P/ \+ F+ n } catch (Exception e) { \\" m5 O$ h% O3 `6 X* r
//System.out.println(e); # J `- v8 S5 y f7 g
e.printStackTrace();
& F. M0 z\\" y4 s) R3 S) q: N% ^ } ( _0 _, E1 X. r3 w5 [3 d. k
}
) E- O$ [% i- |- C4 G }# W( p# X7 z7 c% K: S
. S7 W5 K, O1 b$ h+ Q0 l0 s 1 N5 o0 g6 {& z' t5 W
+ m, f! |+ k) d0 N: d
3 P5 W# I9 X% H0 p$ x; e+ {3 D (3)合并单元格、格式化单元格等' s- B5 u9 R( [9 {8 r
/ C* d! J- Y# g 6 g! Z2 g) v8 M* s& A
//合并单元格并在单元格中输入内容9 l! s, E8 \- o2 @+ p2 J
( }9 _4 L9 h0 T5 S1 R& o
package additionalproperty;# m# t1 J\\" \0 s& X$ X9 s) M1 W6 r
B$ e9 v: ]9 U5 t4 W
import java.io.*;2 |7 I# }) w( U1 Z0 `6 l
import jxl.write.*;% \: `4 Y/ `1 E4 j) Y* T
import jxl.*;\\" Q\\" a3 V$ j1 ]2 G1 m- i' v' t* `
. W, T/ ^. T. l9 G: O# H+ Y1 T
public class MergeCells {
% T- _+ c! O1 H public static void main(String [] args){
) |0 B' i9 `5 ?1 @7 a. t( q try{
9 `& K& x4 S4 b\\" O; N WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
. a L\\" T, Y5 W\\" d4 \+ P WritableSheet sheet = book.createSheet("第一页", 0);, T( k1 j P- ?9 w
sheet.mergeCells(3, 3, 6, 6); //合并单元格) L- n1 q) g6 [7 M
$ l7 U. ~% m. n7 \( ? //设置填充内容的格式* [ ?( E4 D+ m9 F0 u; P5 \8 }% B
WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
; n' M1 T* X0 p4 h7 \5 ~( C) u1 L WritableCellFormat format = new WritableCellFormat(font);. w9 ]; L* C) b. L\\" M8 C
format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中\\" U0 ]3 h) v# L
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
& k4 a* F8 K# \$ u0 {- i0 s\\" S format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
3 R9 [2 q+ b7 c& H! {\\" ~5 ~ format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式2 R4 k3 k/ j! B( a\\" I\\" v
4 M6 \1 g* G; A4 S% p1 _7 f4 s( Q$ @! } Label label = new Label(3, 3, "合并", format); //添加内容9 c+ w1 t$ i5 s' b, N
sheet.addCell(label);% o- [/ K/ {- N
book.write();5 b1 y: \! x: g# Y% A, U; Y
book.close();
- L\\" G% |! f7 B6 r' n2 H }//end try
! y* o& ?/ e, A) B9 N C catch (Exception e){
3 v! f& W* o( N e.printStackTrace();
+ s* i0 N& V0 r* n) O* R( ` }
: Y. y. W; N- [& W/ ? }) u; ]- u( T* W( J. A
}
; A/ _! w A0 _5 X6 C; H 7 c. p4 z8 @; i' I5 Z; S4 Z+ S
}; x. V5 A4 v% A
+ Q, S2 R/ j# b# f* v (4)添加图片
2 U8 w( z r6 {) R# l+ z# X1 y & X6 A6 @5 N6 F7 H# S ?
JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。 S, U) R6 x! t) D, ~
. |! |; C* o ]7 B ) e8 s e: }2 T! G; r
//在工作表中添加图片
: K- c$ |/ n! a: b- [ 7 H7 z$ T; e5 Q8 S
package handleimage;' d! R+ U\\" g+ |( O$ }& y& S
, i7 e\\" F' z* E y) k* F% a0 M5 |
import java.io.*;
) x* ?: H\\" U- e R1 Y+ C3 Z import jxl.*;& g) }: c1 J# y
import jxl.write.*;
3 Y; b' I0 j\\" t4 O& H
' b* m6 S# I9 t public class CreateImage {
7 P* c+ l8 K T7 e: @' ]1 E9 O public static void main(String [] args){
* L$ X$ s' \8 i* f! p0 U$ p try{% I9 A8 E, _: @9 A1 Z6 @3 e0 n
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));0 ^0 G& K- g9 W! A! W1 w
WritableSheet sheet = book.createSheet("第一页", 0);
, `$ K* R' c9 u8 q+ x @\\" y/ E9 v WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式 j% E! g8 C# j\\" Z+ Q
new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));1 R$ w5 G4 a; z5 s
sheet.addImage(image); //添加图片: c* ?: k$ i8 k/ u
8 O2 E, r5 F f9 @' Z* n
book.write();
6 ~) P, V4 _8 v8 U9 x0 _ book.close();\\" v& y! I3 N5 |) y& f) W5 J
}//end try; b$ L' X; s3 [
catch (Exception e){ e.printStackTrace(); }
9 j! o9 z/ V& W' C' ~$ N t, W) h5 g }* n7 G+ o( F: s- b; n$ ~1 L, V
}! P X; U4 N3 R& M1 K; b( I7 G4 Q
zan