在线时间 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 g# C# ?( x2 _\\" }+ i s
. K7 ]: O( Z9 P& f( l
1、环境配置
/ O5 ~! u( e+ X8 |. ?
; t. U* @# E' m9 Q$ W( @- m1 a 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
. @& U- b/ k& d\\" h/ A
9 E0 g* ]: n% ]6 d/ J 下载完成的包解压之后,可以得到如下几个重要的文件:
+ ^$ P1 g+ @/ V$ N R' R& O ; b) v1 c9 c* ?9 l$ o
(1)jxl.jar —— JExcelAPI 函数库;6 U: D' E8 ^$ o- |
( x2 t3 J\\" ]0 E. c/ J: e0 L (2)docs —— 帮助文档;
9 V( x6 R+ a1 X, \/ i
$ o q; T$ Z8 h; r2 V! e* V (3)src —— 源码文件夹;
1 r( g q: c6 n D: G
( H. F4 ~ b- o! ^8 ^* s' V 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
0 m9 [\\" p$ N: _/ d. y 2 N6 k- c3 S o0 {- o0 q
2、Excel基础操作实例4 ~% {% s\\" F7 P3 }& w, p8 d
- I; s9 u$ I3 r4 a (1) 创建Excel文件
9 b- J4 v$ |4 q' }! Z$ M: Y
& e. @) @8 b8 _9 f& M /**读取Excel文件的内容
4 k4 X7 c$ l4 l+ g5 o, R8 s1 F * @param file 待读取的文件
4 r6 S( Y0 G5 j5 z' ]9 a * @return // 生成Excel的类 */' K! t0 Y; D, V5 S# T' T
package createxls;
( J5 @* A4 c; T) M$ |' o
8 n( {( N/ I: G! @1 [ import java.io.File;
) E* K& d( |: a, @, [8 d0 O % F0 r _5 @4 L3 q/ _
import jxl.Workbook; 1 |% r' i$ S/ x2 e0 U5 v4 [! L( z
import jxl.write.Label;
* g' M! ?, R5 P F import jxl.write.WritableSheet; * t2 d3 Y6 C0 u0 D5 F* _2 y+ i
import jxl.write.WritableWorkbook; 8 Q: t9 ?3 k) i# }# G) G
: X. @& P. I- Q# K! D/ V public class CreateXLS {
3 _, q: q0 U4 z, } public static void main(String args[]) { + u: f' V+ I' E' b
try { * y4 J/ \# V4 @3 @7 O6 |' e H
// 打开文件 B* O( A2 l+ @/ H% D6 Q0 P
WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
! Q\\" L% Q* D- h // 生成名为“第一页”的工作表,参数0表示这是第一页 # O. L4 C5 V* }4 s, g( X1 ?, R# o\\" I
WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
, M2 T3 O% y3 y, C1 F1 { // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
) j# M* C9 f) r( A3 o: ?& \0 j1 V // 以及单元格内容为test 1 f6 D2 @7 c7 G& W# e% H
Label label = new Label( 0 , 0 , " test " ); ' {- U. k C/ v9 S* x
: r2 k0 c6 x8 i\\" |. ^5 A- B5 u
// 将定义好的单元格添加到工作表中
2 R) u5 [8 ]/ K2 b# Y/ b+ J sheet.addCell(label); 8 S( a; n7 E2 L) U) Z
' s8 f0 q% j- h# V\\" M/ A& B
// 写入数据并关闭文件 9 p7 y- H7 X. c, @\\" C
book.write();
; C5 [) [( B( i$ k7 b book.close(); 6 }& `9 Z$ ^ R8 [0 U( v4 t$ B
z7 X* q6 q% P' {\\" v) ?+ R
} catch (Exception e) {
# g3 F0 d3 j/ ?, k) s. u System.out.println(e); + I; G U- f/ i* y) c% x
} , M: h, X9 w% u8 M. Q8 w
} / ^7 |* ~: a5 S' j\\" M
} # P9 f\\" C1 @4 N8 r3 ^' z, @
E5 C# g1 ^+ \% \' X
1 {, F! y9 L% E7 J n1 q* H
( N( k3 J' v, o. h\\" P$ F- C (2)读Excel文件$ l! A9 U% @3 [8 y5 K
+ M% \ z0 o8 k! J& k
1 _* H8 `2 i( \9 M# r0 o package readxls;\\" J- d6 [\\" S3 q
7 p2 i3 c$ I8 L3 s& f# e6 m
//读取Excel的类 + F. ^2 P9 `: T: s# D0 T9 E
import java.io.File;
- t1 t# C0 z; k5 U+ d1 b( c0 ]' ^ * w4 u9 Q% v) o\\" g; O: L5 s1 [
import jxl.Cell; ' u- b& M& L9 J1 ?4 G
import jxl.Sheet; ( d1 M; P& w7 S9 C* ^# M9 w! E3 o+ B2 N
import jxl.Workbook;
8 M/ ]) |+ p8 T& O4 M # C% n7 K+ x8 n( ~8 U
public class ReadXLS { ! H& c& f) n7 ]6 ~0 ~7 X9 Y
public static void main(String args[]) {
, p\\" @9 m. B1 ] try {
2 o2 i( M, n' ?& o4 v, k: D Workbook book = Workbook.getWorkbook( new File( " test.xls " )); % ~6 t/ @: k6 x8 G$ N9 |
// 获得第一个工作表对象
\\" o y0 C/ S% O3 v0 i0 W7 I5 I Sheet sheet = book.getSheet( 0 );
9 A( i: K8 I4 b // 得到第一列第一行的单元格 8 a) U) |+ ^$ n! G' l
Cell cell1 = sheet.getCell( 0 , 0 );
: _, p& R! e+ X\\" f- \ String result = cell1.getContents(); + L- g) ]* U# x
System.out.println(result);
- B\\" M* v\\" w) Y2 U4 }$ \9 f book.close();
5 z0 p$ N6 b( G9 ]5 [) k8 i } catch (Exception e) {
: V8 ~. _& z7 W4 [ //System.out.println(e); 0 }# [3 d K; B\\" M& A1 p! F, z
e.printStackTrace();
. K; o. w) v$ f } 0 H4 S& x( K% M% t
}
* `& w) x& U8 n1 o7 z# D9 { }5 g\\" D3 t2 b7 U/ c3 T\\" Z, \4 @
) V M, W9 c. W7 D$ g% { % {4 S: m4 B4 K) h! F8 |
2 n/ l' M: z5 Z) `1 A% ]+ K
) Y4 b- D# [ @, \, `% G1 [ (3)合并单元格、格式化单元格等4 t9 d: u1 j e' r
4 I$ O& I! m) ?: w3 [0 L
$ L! R- @3 z\\" ^ //合并单元格并在单元格中输入内容
! l. A7 b\\" F\\" u; ^7 e2 H$ H\\" G: [( E
' m2 |: J5 D3 t1 Z- r$ p package additionalproperty;
1 x$ \1 c9 D$ j9 T8 k0 I, V + i+ b( |/ J1 ~& F; y) r
import java.io.*;+ U2 s7 x. }5 I6 m6 r) E% H1 z
import jxl.write.*;5 D o% e- e: A4 C
import jxl.*;+ t9 n) G }\\" N6 F g, p
# A1 R$ ?6 e& N3 C/ R# m public class MergeCells {) e( K4 Z3 y: o& o% W# |0 Y
public static void main(String [] args){ t( l1 K3 k! t
try{
2 [, [( j6 e2 J3 h! ?% M8 Q WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
* I, m8 ]; g+ N' @5 d WritableSheet sheet = book.createSheet("第一页", 0);. X% u5 u/ p8 I( ]* ?% r
sheet.mergeCells(3, 3, 6, 6); //合并单元格+ k) l# S: {* n# h7 b& D5 ^
% O7 |0 `& M9 v* i% n\\" a
//设置填充内容的格式+ M# T9 F$ o1 W$ I G9 B) F
WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);4 G( r* H- W& _0 p& z! m( t6 r
WritableCellFormat format = new WritableCellFormat(font);# \/ a/ E {! h& n# j5 [
format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
; `- u\\" d# D3 B, [; f format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中7 _/ \' j( q+ L3 d7 N' A# d
format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
& N0 C: ~, c. O0 A- z. } ^4 d! s format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
7 q9 j; x) t4 ~0 j6 U1 T+ i
) T/ j; e9 P/ J! r0 H Label label = new Label(3, 3, "合并", format); //添加内容
) Z- c* M ^# t2 r2 u: D; j sheet.addCell(label);9 |. ~7 ?5 _ P
book.write();
\\" V3 N\\" S3 E% J& W A% |: C q- v book.close();
+ g7 S3 _) S ^1 o2 m& d }//end try
\\" t: I& D8 J. s catch (Exception e){) f7 H5 W2 y3 k, x7 \4 U7 ` x; }
e.printStackTrace();
5 R7 U% ]! b, x- z2 J8 T4 B }
: X+ k% r0 P) H6 O+ K3 t }: h1 ?' w R- m g) o
}! l0 f, P- [6 c( n! b) p7 o% i
, `( W# w( U7 p7 Q
( y) i% L! k u% V, a9 ^- d/ q* O
2 d0 n: o( A- @6 o$ I: A/ O( W (4)添加图片% M' w! G\\" C( a. q0 ?6 n0 H: {
0 P5 ^0 L$ D. f
JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- L1 j6 M! b. Q3 s\\" p) D ; V5 y* W! K& g! O\\" O* F3 O& t
2 t. D2 x) X3 u+ h4 I) p* ^9 K //在工作表中添加图片' Y; y- C: C4 V
' n: Q0 D/ g\\" G% p
package handleimage;
# f8 O: W9 H$ L, L8 x% R' ~ , I& U2 Z S\\" ~0 _( p
import java.io.*; m) S) z3 M- b# \3 N
import jxl.*;+ s, e* v3 C0 t/ l) g9 U( S
import jxl.write.*;# V, A# \: R' o+ |- h; [# p: w
& S/ ?7 X4 X6 R0 l6 B9 d
public class CreateImage {
\\" U3 t2 u$ f% i& `% |# }$ G public static void main(String [] args){\\" Z2 E/ j ~# m1 r$ U
try{. f2 D3 Q; k# a8 m8 l6 F+ N4 d9 h
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
^# Y- D* v1 g3 B1 D9 ^# H WritableSheet sheet = book.createSheet("第一页", 0);
' d! ?3 Z: [; n/ J3 I WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式+ M# Q4 s9 O. Q% I\\" t
new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));6 C) F; t9 X1 p- G; R4 b3 j1 z2 X\\" ~$ H
sheet.addImage(image); //添加图片8 P: ]' S5 u, j+ q, E. }\\" ?
! d, A5 J# N' ~$ i
book.write();
% f\\" F' S$ e6 O book.close();3 F, S& v* S2 V5 b5 v: N6 e
}//end try
. S$ p3 [6 \0 S9 e/ p$ A catch (Exception e){ e.printStackTrace(); }
5 C4 u' Y6 I! ?1 R, r }) Z( j' s6 p/ }% o5 I8 x5 f
}) w7 R\\" `0 T6 Z. C
zan