- 在线时间
- 491 小时
- 最后登录
- 2026-9-17
- 注册时间
- 2013-2-28
- 听众数
- 118
- 收听数
- 46
- 能力
- 268 分
- 体力
- 39229 点
- 威望
- 1340 点
- 阅读权限
- 255
- 积分
- 31234
- 相册
- 2
- 日志
- 0
- 记录
- 0
- 帖子
- 1389
- 主题
- 937
- 精华
- 0
- 分享
- 0
- 好友
- 111
升级   0% TA的每日心情 | 开心 2026-9-17 16:51 |
|---|
签到天数: 265 天 [LV.8]以坛为家I
- 自我介绍
- 内蒙古大学计算机学院
 群组: 2013年数学建模国赛备 |
 - JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。
- : D; A' @7 g5 W4 N
- 2 X. y) t* H; c; S! s, _
- 1、环境配置
- : B; L; b1 J5 J& w) k l7 T, G
- 4 {$ n& H) o7 x3 L; ^0 i
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- ) t! f0 y* S6 X$ f5 E3 X
- , [7 f; A$ s+ u$ L3 H0 z4 z3 r
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- ! f: H8 `4 S' @! [# Q' e
- 7 Q& _\\" \$ n, m0 t
- (1)jxl.jar —— JExcelAPI 函数库;
- 1 H- Q# d6 Y+ g+ @( K! M
- 6 W: |( S/ P' s9 I
- (2)docs —— 帮助文档;/ o8 U8 h# R1 k6 }, k5 m
- : T* O/ W+ d7 E7 M9 t
- (3)src —— 源码文件夹;
- ' j2 X3 J# G# r2 @& ?' m: q7 T
- 8 A) k7 l9 L/ J B: _0 k5 Y% m
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- 0 }3 M' T+ ]+ w N9 Q4 T
- - q* @0 i( }8 v) y; j\\" p! F8 V
- 2、Excel基础操作实例
- : s, h& _( x+ F6 f# S0 {
- 4 Q. o% A/ k8 r9 q7 W
- (1) 创建Excel文件
- ( q( `2 J4 c2 L0 U# b/ U
- , v# T D\\" g. Q3 q* y6 _
- /**读取Excel文件的内容 \$ _/ c1 o' N8 R
- * @param file 待读取的文件
- 3 n0 ~6 B5 i# v8 l2 a9 m
- * @return // 生成Excel的类 */
- - U: p5 L; }3 B! H
- package createxls;; i! x. Z3 q1 E* q
- 9 @1 z& L/ Q/ M# F6 I0 l, R
- import java.io.File; 9 \\\" K$ x& O g5 o- O
-
- : a( V7 t d; r. t( ^1 W
- import jxl.Workbook; F# E! b; y+ m. z% ^% e' D( c: d2 `6 K$ T
- import jxl.write.Label; . S$ N( t0 x2 _- i
- import jxl.write.WritableSheet; ) N+ e5 D( ]: Z3 {6 o) y5 @
- import jxl.write.WritableWorkbook; $ J( h3 F! ]( o: U X
- 1 M6 k$ _\\" t4 h6 a3 r
- public class CreateXLS {
- 1 @; s4 c: h( R$ k
- public static void main(String args[]) {
- - Q1 w/ m+ L n6 G
- try { ' n* c1 F+ R0 I+ G, W
- // 打开文件 # w8 I! ?4 Z+ }0 j8 G& _
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- ) h) H \8 @2 }/ h! P
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- + W+ C+ F* f( M' R8 ~ W: A
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); . i2 W5 g1 h7 {* F/ ~9 S/ T
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) / ?/ e5 \3 I5 n' `
- // 以及单元格内容为test $ K0 I6 s$ z& J4 t
- Label label = new Label( 0 , 0 , " test " ); : S9 v4 u) Y0 b& P0 y6 N) n
- 5 F- t* g! |( o/ j7 Z
- // 将定义好的单元格添加到工作表中
- ' @% R0 [5 m) o0 ?( M
- sheet.addCell(label); \\" E# G6 j& y; s% o
- 2 M3 `1 P$ k; e9 V5 z* [: O& q
- // 写入数据并关闭文件
- 9 R1 n' R3 ~4 N( e* g0 T
- book.write();
- 4 O: l( \, P( I# D, a: c; x5 L( L' H
- book.close();
- & H; m3 a6 B' U J; k
- ) j) _: G' F8 [4 I: A) C
- } catch (Exception e) { & J: t: K, Z+ t$ l% x
- System.out.println(e); $ ~1 y: X6 Q4 V; v
- }
- ' @( t. A3 g: W% L$ {. X
- }
- 7 o; i1 X3 T9 @. C z' d\\" f' p
- } 9 R3 f3 \1 E5 F, Y; ^: F7 q
- ' l1 k2 b' A7 v. _; \; d- W
- 7 R# y, F7 H% C- ~
- - e' M1 m: s. X6 R6 l, S, A
- (2)读Excel文件+ Z: G4 ~9 z: }2 k5 {
- * T1 P, ]2 }' V- M. `) t% ~7 ^
- ' B+ k7 |: F- m' Z1 U; t) e7 b
- package readxls;
- 3 w/ P9 N2 M% T$ q# u% K( F/ B\\" e! k K
- ! e& I0 J1 s, d+ c* m
- //读取Excel的类 2 ~2 \; d7 ^5 ~* L
- import java.io.File; |; ]4 N3 E6 ]7 N- I& F# j& _
-
- 9 X; |% J/ e& \
- import jxl.Cell; 4 C; K! a' t4 j6 g3 Y
- import jxl.Sheet; , s% @7 D5 o5 R' ^; u
- import jxl.Workbook;
- % {: F3 S( u* j\\" e, `6 Y\\" [* b+ ?
- , q# T\\" v3 J* O! N
- public class ReadXLS { 9 v. ~3 J\\" L: f/ ~1 u9 L
- public static void main(String args[]) {
- , t* r: M0 O, y0 B; T8 U7 ^3 k% p
- try {
- * z9 X\\" I3 c5 m# E( z4 X- ]- O( ]( u
- Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
- ' b* A' P7 j9 J
- // 获得第一个工作表对象
- ; e6 N) B# V! o$ Q\\" t
- Sheet sheet = book.getSheet( 0 ); ' K% P! n0 l6 a, I
- // 得到第一列第一行的单元格 \\" P) R/ u& ^4 l2 J& T! a
- Cell cell1 = sheet.getCell( 0 , 0 ); - ^; l0 Q2 j; C* N* i9 E9 i1 G
- String result = cell1.getContents();
- 4 Y, b1 _/ P1 O8 x7 n/ i- K* c
- System.out.println(result); * ~, p! m* o# t9 a
- book.close(); 8 i% L' p4 I5 @ a9 v2 l( B& H
- } catch (Exception e) {
- \\" R, i7 y3 u4 c8 u4 ?6 d0 z
- //System.out.println(e);
- 9 K1 J2 _1 c4 N# c0 k7 ?
- e.printStackTrace();7 h K9 s5 o$ n1 g\\" o
- }
- 7 b; c; T# w0 B! A+ T7 V/ P$ Q
- }
- 0 M3 `3 x' ^1 o
- }# x& Q$ F8 o3 O' N
- ) I9 G; u1 S1 Z( {6 n
- 9 q3 S/ |1 X: T2 H% S8 m
-
- ' F4 _% o3 p. B- K
- * s' x$ }. T% C! G. y. {# ^2 g
- (3)合并单元格、格式化单元格等; B0 V3 v% j+ t& h% a2 A5 x
- ( C' Z c$ ?\\" k! r5 K. y6 z\\" D6 A
- ' f5 W8 {0 t; j& W- A
- //合并单元格并在单元格中输入内容
- / K4 |2 J1 H+ E5 \5 k/ Q2 `+ Z
- 2 f( J% Y/ |0 p1 T; y3 t
- package additionalproperty;2 b7 e! [& a8 W M+ y8 p* K
- 5 ~* q6 ^6 P; s+ L
- import java.io.*;6 L* r0 \2 o\\" S$ {+ L @7 p% Q% `
- import jxl.write.*;2 m* Z0 M4 z( J8 I& j9 g* k% o
- import jxl.*;
- 4 I8 H8 ~- m( `' i
- 9 r7 C D1 z( I8 G3 O
- public class MergeCells {\\" I4 b+ |7 L- x\\" p+ j5 Y; }; k
- public static void main(String [] args){
- 7 G0 B- j) p) K
- try{' Z) G; a0 S4 ]
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));* @( a# b0 i\\" A3 i1 _
- WritableSheet sheet = book.createSheet("第一页", 0);
- 9 [0 Z3 c$ ^: Q/ }
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- % c0 s' q' `( {' r( K$ |
-
- ; h: V* |7 ]: D3 m\\" ^/ t
- //设置填充内容的格式
- : {; B. E' R2 L: p4 _' ?# w( T
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
- k5 P. ^1 G! R4 C4 m3 C
- WritableCellFormat format = new WritableCellFormat(font);* I) h9 h# ~4 [
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
- ; Z8 p8 b) r6 p% _
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
- & w1 t& T! [/ h; H( L
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式7 b, j5 }6 X% Y- b! ~# S
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式( S8 `! K4 V, m! g1 o( W
-
- % s V, }\\" V2 L! }# }; ~# O
- Label label = new Label(3, 3, "合并", format); //添加内容
- ! ]1 M/ {* l0 b
- sheet.addCell(label);
- ; p6 x! c\\" |$ y. K) E1 W
- book.write();
- + |4 \& F\\" v, A) T: ]/ ?- m7 Q/ [
- book.close();
- ; g- i$ C& l! E
- }//end try
- # p) \* V# X3 F& U
- catch (Exception e){
- ( q) Q7 ] y- ?! l+ l! J. W4 O$ }
- e.printStackTrace();+ l) Z0 F) c' n
- }
- - \: F( z8 E: n% w+ J
- }
- - _' D- J3 ~/ i, k3 Y9 d% E
- }9 ?) v6 {0 v m/ i
- ( A1 T: e, {. L
-
- % R9 o% n- P9 T- t, p2 c% P5 Q
- ( F/ ^4 ?: o! L
- (4)添加图片$ U5 |9 F D1 r5 n- C1 _+ P
- : p3 r. y) U& }
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- 5 U1 O) C4 S4 J7 u/ V
- # T0 [% D. q5 p8 ~( f* R
- # v9 U& O: U7 |, i. w0 k/ C
- //在工作表中添加图片\\" u! f3 R+ t% z* T7 k
- % g; p- @8 f4 ?6 {
- package handleimage;
- 7 G. T, A8 \( x9 z, O
- , u1 N4 U! R* J: i
- import java.io.*;
- # H' w. H2 m, M% W- D% c% E9 |
- import jxl.*;9 c8 C; F3 [) @: e
- import jxl.write.*;
- % s; V# m3 B) ~! C4 H- s7 a0 r
- ) J, @$ _2 u/ J; ~
- public class CreateImage {9 ^. z4 U* A! n; o( j
- public static void main(String [] args){
- ! @/ q; }6 }! E& m
- try{9 o9 O- K- [- y
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));& `4 }* s, H2 P# {0 C# V
- WritableSheet sheet = book.createSheet("第一页", 0);
- ; X, M8 F( K% r0 w\\" ?
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
- % D4 t2 Z% W/ N% U7 A0 y! [
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));( p+ m% ~) D' O+ G2 G* ?
- sheet.addImage(image); //添加图片5 m. c4 X* ]8 K\\" Y
-
- ^% u: a% \; S) p( {. R
- book.write();
- 6 J7 L- G* v: J4 d
- book.close();
- \\" i& ~7 A/ l! k3 E( A8 M6 E5 P5 T
- }//end try( X* Q& n( E W7 `& V4 h
- catch (Exception e){ e.printStackTrace(); }
- 5 g2 ~2 R; b( l+ j* R
- }6 H9 g) ~ R+ K* Z3 f# H% A
- }5 q2 ~1 G0 H# l$ E/ Y, [1 i9 k0 K
|
zan
|