数学建模社区-数学中国
标题:
【转】Java操作Excel方法详解
[打印本页]
作者:
wangzheng3056
时间:
2013-8-9 11:28
标题:
【转】Java操作Excel方法详解
JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。
! S( A$ d% [2 p+ ]9 |- `7 P3 l8 ?
: f* f# H1 K; \6 Z/ V$ I+ D. t
1、环境配置
" A% e4 \" }3 [1 f1 N2 v
$ V$ a8 e# M9 [, v, |+ A
如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
6 E9 j0 I }4 H0 M4 b; b
3 G4 E( p! }( x4 ]: c( \3 p
下载完成的包解压之后,可以得到如下几个重要的文件:
' i- W5 ?1 w4 L
0 n/ I, |8 m, k1 B3 h1 j" G
(1)jxl.jar —— JExcelAPI 函数库;
7 G' [& x F4 }+ d3 e% m7 h2 Q
( V7 i- x3 p. f' g& C, Q
(2)docs —— 帮助文档;
! ~5 B! r* M8 q
1 j. @: B& I# b+ o! \
(3)src —— 源码文件夹;
, B0 X5 L2 [! B/ t
4 Y- ]9 P V- P1 f2 h
将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
2 z% N& F0 t' @& V
8 a$ v( z# c, X5 [+ R
2、Excel基础操作实例
$ Y% ]+ K/ U$ E0 q1 v
$ Q0 I( F, i) M: t. x' a
(1) 创建Excel文件
* Q; Q, }) h/ \/ r7 O
" {, h1 O( \# {7 m7 A
/**读取Excel文件的内容
& b+ ? f% ^6 x* Q# m, U7 b
* @param file 待读取的文件
: x7 `9 h$ j; c x( e* c- w' Q& J
* @return // 生成Excel的类 */
+ c' j" S t% D3 m. Y
package createxls;
4 f. Z8 U4 ]8 M* [7 Q: ~* i x
; v$ K a4 ]$ T7 M2 X; i: [
import java.io.File;
1 b1 _% J5 C, C7 E9 o" Z
# \6 M6 q; \! H) c
import jxl.Workbook;
6 n% }# r7 N3 T3 N" U# ]( l
import jxl.write.Label;
/ @( [! G# T$ p6 E/ p: g$ i
import jxl.write.WritableSheet;
8 [% ?* v# ~$ Q. }$ w
import jxl.write.WritableWorkbook;
. M! L& w' K5 m) N
( C. S1 } `" x/ O* i; j
public class CreateXLS {
1 ]. @ }. ^" \! m1 C& O
public static void main(String args[]) {
N" Q4 F$ ?2 L: b/ @& w8 _
try {
! Z* _* k! ?/ A6 N5 |5 }
// 打开文件
3 W6 q! }! M( t/ {+ |! n
WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- L+ ^! o, v; s( T5 \' y$ K) y5 r
// 生成名为“第一页”的工作表,参数0表示这是第一页
4 i1 Y, z! H& V% d7 i8 E' U& p
WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
) { ~( M ]2 @- H# U; x
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
) h2 @+ l5 k% O3 U! l/ h! ?
// 以及单元格内容为test
$ J" `6 o# h/ w- _
Label label = new Label( 0 , 0 , " test " );
4 v" G$ \4 }8 _2 _8 e4 P
# k8 S' ]0 i' C2 ~* C& d3 v: J
// 将定义好的单元格添加到工作表中
m1 j$ `% I, D6 x
sheet.addCell(label);
, |& B- k% N/ A _1 n$ N6 l7 b
& N2 J, e' I$ f: N1 H# S8 O! M* `
// 写入数据并关闭文件
7 W4 }$ T* `( o: y
book.write();
( o4 t7 b {6 p' R+ X
book.close();
+ Y; s. V+ l4 k
6 r) V# G- r9 m) b) Z
} catch (Exception e) {
+ ?3 e' s5 e+ p
System.out.println(e);
% u, {# E' Y$ h- p9 _' X
}
/ g. ]+ w' ]9 Y8 p; E4 r
}
# F" B. E$ Q# V3 K
}
; _2 h! Q+ X' y4 X" n! L
! R! g/ d+ L/ j3 B/ V$ d+ K" p
4 ?+ p: S" |+ z5 w* s1 O
( T! t2 D" \5 `+ b: d
(2)读Excel文件
7 e6 H9 C! D7 q% w5 }5 J
- X h- D9 E: E5 C$ W5 \
6 P* e( q! g3 }3 T% z2 `
package readxls;
6 p4 y4 N; O& s4 X* z0 {. @( Y
! M: ?9 [ l. n# f h3 ?
//读取Excel的类
2 U+ Y: e4 z" v9 O
import java.io.File;
, k) v ~4 H9 O- [1 T! v/ m! s3 j
4 ?8 ^7 n8 ^) ?: ]5 y* h
import jxl.Cell;
8 C* b3 s7 p7 x3 @# X
import jxl.Sheet;
* Z, o1 O: b6 x+ x
import jxl.Workbook;
9 S \7 f! m0 m9 [$ S- T
* _, a" X" q, H+ z% ^0 A' v
public class ReadXLS {
7 C: T( X+ e1 l$ s
public static void main(String args[]) {
" C% R+ s5 a* Y, @
try {
4 a9 D; K. Z6 H
Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
2 ]' _) E' K' W6 l, k
// 获得第一个工作表对象
, G- f, ` L0 f! [; @7 W
Sheet sheet = book.getSheet( 0 );
9 y! N) ]7 @4 K% t0 x% A+ k
// 得到第一列第一行的单元格
* ^) p) \$ S8 K
Cell cell1 = sheet.getCell( 0 , 0 );
4 [# [' d) C2 n \$ J2 N r
String result = cell1.getContents();
7 O: ~; z9 S) c3 ~" s! o4 c3 Y$ t
System.out.println(result);
* q: e" O R; u% f! v. N$ ]7 P! y
book.close();
2 Y+ P L0 G; {' ^" n4 z: K
} catch (Exception e) {
0 i. b* j6 s/ t) Q
//System.out.println(e);
# a! _3 h& X7 x" U- A" P* j
e.printStackTrace();
% L; x K* B+ H0 _6 e2 C
}
$ s" M! E; a; o$ p# G3 O
}
% L3 `4 Y5 N( K: q
}
# G4 ~4 l9 v& R4 l: {/ E
% \% |3 U! u6 l$ x
& x+ u5 I5 I9 U: Y
+ P4 Q, T$ c6 |( V' y. D* I9 [$ d
9 B! O( L5 L! D6 @; |, @
(3)合并单元格、格式化单元格等
4 Q8 O; c9 r* @, G$ v2 N' w
! F- Z$ Z* ]$ u3 z' \4 A
" l) k. E" G, Q/ P
//合并单元格并在单元格中输入内容
2 _% u8 \: @) G
% K( i, {! R v1 o% f
package additionalproperty;
3 C5 e f8 P b* \+ m, C( }
4 y4 A5 {; V4 ?' Z
import java.io.*;
9 S% S* }6 u% ~$ E: ]; [
import jxl.write.*;
( p, t5 o! ?; P9 X; m K, |; L# Z
import jxl.*;
/ ^7 w7 }0 f+ n
" C3 x# K" `: e/ b5 c+ h- p
public class MergeCells {
, E0 C0 b$ _% h6 f8 a
public static void main(String [] args){
6 P" t( @% N! B8 |: V; E+ X0 o8 U
try{
2 Q1 S- h7 t# \8 [+ _6 U
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
a+ N, }' }/ x2 Q: [$ O7 U
WritableSheet sheet = book.createSheet("第一页", 0);
) I9 F, F* O) Z0 z* n, ]7 X2 x
sheet.mergeCells(3, 3, 6, 6); //合并单元格
" A/ ^! [8 Z! X) D7 X4 i) c# b
9 J# d- O/ f! k$ @; R+ |) y( X
//设置填充内容的格式
, ~, Y) O7 A& N( C/ k$ f: C
WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
3 F5 E: L/ I! J3 Z1 s
WritableCellFormat format = new WritableCellFormat(font);
7 C9 n" h Z Q
format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
$ \* R2 I. N/ S5 |
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
9 n% T4 {6 F2 q% S# _
format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
* I+ S: g( n+ `, \" K! L9 j
format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
% x @ Q8 E& K6 Q1 v
& d5 z2 M& P; K* C5 w5 i4 s1 L8 Q
Label label = new Label(3, 3, "合并", format); //添加内容
% B& P9 J+ V4 \ [$ z6 w
sheet.addCell(label);
5 g" W( x. T$ e2 W2 G, d
book.write();
- e! h5 f* A/ u+ H8 m: d; a
book.close();
( C/ ?' m1 H$ c2 P# }6 Y) N6 y
}//end try
1 J7 X5 b! X+ Y
catch (Exception e){
4 `* Y# J) q; b X: A2 s
e.printStackTrace();
' E9 Q: a4 U3 u G0 ^2 e x
}
& T2 F% k* \ O. S& U7 y+ s
}
3 A; c! M+ e2 |, _, \
}
. l1 c# m, I R" ^" K6 Q5 K
6 U ^4 r; _6 S: ~3 R
+ j7 f# A# S3 J% U
4 R; p' o& h$ y4 J5 e
(4)添加图片
1 `. S+ O. i$ T
6 X! U8 _' _$ r C8 ~0 L
JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
* R3 p: c5 B* i: X( ]
; e* ]4 T9 E7 q; K. S4 V! u. S
, N" q" @( h' L T! Y: T
//在工作表中添加图片
) P1 w+ p+ k3 w% e( O2 N3 H- _
/ j6 s2 ^# K) z; ~" I% d3 @' _' {
package handleimage;
+ U* { ^. j7 X O5 e4 y! |
. ^7 Y/ ?! A9 D9 o |# j8 {3 m
import java.io.*;
( A" J1 `: S% _; n0 `& c( _
import jxl.*;
% K# _- `- u2 g7 @1 a# l2 H
import jxl.write.*;
* v) F' d: W a8 P3 V$ Q( i
9 E7 M6 i- w& w' o# Y7 k# a
public class CreateImage {
& M" X. M+ R# n" @8 B
public static void main(String [] args){
* Y( t c1 {0 H: i& @. F! P8 c: T
try{
2 }2 [6 I' J% v. @. p/ L' f2 [, I
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
0 L( @' ^. N3 ^+ k/ h' A
WritableSheet sheet = book.createSheet("第一页", 0);
7 H) h8 n5 ~( [* N
WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
: ~. W% S6 D! w( R7 x/ Y; s
new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
! Y, P, ^8 @5 p3 r; G0 i
sheet.addImage(image); //添加图片
, r2 e9 Y/ a, p) w7 n5 z3 x5 P
$ ^3 O5 p9 b% K. |& P" s! Z! q2 R, ?
book.write();
6 n, s! A$ K' N: Q& L$ r9 ]6 w
book.close();
0 w! n$ y2 Z1 H
}//end try
% u" a/ u( ^" g
catch (Exception e){ e.printStackTrace(); }
; F' N' t. t7 H; r: u+ L/ ?
}
- m. O0 E( E) T6 Z f
}
3 }7 @. M$ A' z8 g6 W
复制代码
作者:
guoaecg
时间:
2013-8-11 10:41
Excel, 回复再看
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5