数学建模社区-数学中国
标题:
【转】Java操作Excel方法详解
[打印本页]
作者:
wangzheng3056
时间:
2013-8-9 11:28
标题:
【转】Java操作Excel方法详解
JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。
/ Z% X& t$ Q# [
+ @) |: B' F H2 n& e
1、环境配置
% x6 x' x3 D. y, W1 H
$ N& I) }! ^- F6 L
如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
' P: k# v! x3 F8 E" M% P; s
2 ^! L) A; h) X! u0 {4 ]2 T2 B
下载完成的包解压之后,可以得到如下几个重要的文件:
* {7 E- q0 [) F1 y
! x) S0 s# l$ p' Q& _
(1)jxl.jar —— JExcelAPI 函数库;
- s% ^5 d1 v4 V4 }2 J
. s2 j# j, a. t4 |5 }
(2)docs —— 帮助文档;
$ |! ]' X' }' F& w
1 M) G! G$ l7 V' D7 y; ]# H
(3)src —— 源码文件夹;
1 I/ Q0 y# ~4 c ~# ?. j
0 }3 ]! _4 V, @* q
将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
( p; u3 G: |# A0 Z2 i
u/ f# Q/ F) G: b% k
2、Excel基础操作实例
- c! l1 `) p& m
h2 q- I/ h+ _5 P1 ~) j
(1) 创建Excel文件
! m" j( B+ ~3 M
' I$ D. B; J. k+ g0 r$ s. y
/**读取Excel文件的内容
/ b# l2 [2 E4 {, [0 R5 O/ @
* @param file 待读取的文件
0 o3 o/ S2 Z9 O7 [9 L
* @return // 生成Excel的类 */
- c+ t+ r: i" ]: n
package createxls;
8 W2 \$ @: c# {( i3 ]1 I
' q" _+ d% R/ k
import java.io.File;
2 O4 h/ k4 c' e% |
, z4 ^8 I- j. s
import jxl.Workbook;
4 t( d* O3 v' x
import jxl.write.Label;
4 k4 { ]; j* A4 q0 D* ?6 Q" ^
import jxl.write.WritableSheet;
s% r: F4 G* |1 I
import jxl.write.WritableWorkbook;
6 N8 N/ D8 O$ y* v; F( t
3 u5 s# [! b2 P# T
public class CreateXLS {
+ W- y' e# P5 B) U: N7 T
public static void main(String args[]) {
* x2 y$ P+ N0 ~5 P
try {
$ }( D* b+ k+ z
// 打开文件
/ B% E3 \1 _! ]- w( `: x4 C
WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
3 A4 Q, @/ o! ~
// 生成名为“第一页”的工作表,参数0表示这是第一页
; X& Q! V1 `. t7 Y8 _- q0 {
WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
/ d0 F' l, H5 r G/ D+ N; d5 p1 G) g
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
0 J: Z. b, X. _
// 以及单元格内容为test
- N" `9 O9 I$ d7 M5 L
Label label = new Label( 0 , 0 , " test " );
0 `6 @ w* N+ f/ [- j' e$ o; P
' O& ], f2 d5 N" |$ n. R
// 将定义好的单元格添加到工作表中
4 s8 c9 e2 |. p$ L
sheet.addCell(label);
' F" d S) D/ V9 F# v. h% V
1 }& p& M A0 R
// 写入数据并关闭文件
4 [' S- N- [; Z
book.write();
" H/ j" Y; d# O6 [
book.close();
6 G6 p0 Z) G5 R; ^
. \/ H6 Q7 W8 z! R! C1 f7 C. f
} catch (Exception e) {
i/ E5 d' M2 x6 ?* [# J) x3 j
System.out.println(e);
- ~/ `3 L/ d$ k& g+ l0 z% q) j, D
}
- H& e6 [: A: k* e A, ]1 |
}
' ]1 V3 X" t" I; u) _# l4 c
}
+ r" b$ k3 M9 y2 K8 P$ `
y4 k- A, r9 |: D+ w, K
4 [3 y! u& j" h0 F ?, e7 k9 B
0 c; H/ B4 F" ^0 [/ D- r. H
(2)读Excel文件
+ C& p0 D5 H5 B& D3 d9 x
7 T; Z5 P6 \! W% {! j; F( A
. G' x9 Z# v0 H' A" k w; W# X z6 s
package readxls;
5 D4 r t! P9 x G% H
, F$ Y/ Z& ?* B/ ^
//读取Excel的类
0 n! T+ l/ m1 n, f' f" E" Q K
import java.io.File;
, C& b8 q+ R9 X- x: f/ \! |
; \$ E- h' j' R
import jxl.Cell;
' O1 d' [0 J7 l+ p
import jxl.Sheet;
4 L9 z! W5 J) k' ]% W ^3 U
import jxl.Workbook;
9 g( d; }- j% q" p, w
6 m: }: [' D. v: P4 P
public class ReadXLS {
4 K& t4 b' C" W5 c+ h
public static void main(String args[]) {
& Y, d' x" T/ h. ~8 N4 f! w- A
try {
- y: I4 U3 ]2 X6 ^
Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
; L: m& n/ r* ~5 f1 ?8 f/ {. E
// 获得第一个工作表对象
! k7 {7 ?0 z9 {$ L+ s) d
Sheet sheet = book.getSheet( 0 );
9 ]! z4 G/ P/ \( @0 i7 X
// 得到第一列第一行的单元格
8 t. |# q. s8 B- m& D
Cell cell1 = sheet.getCell( 0 , 0 );
+ V& B" D- G; \& N( Q$ |
String result = cell1.getContents();
6 I5 x7 c* f( s+ W
System.out.println(result);
9 R- U# a. d8 e! M$ H4 w
book.close();
3 G. P% ]$ X, g( e# O% x" p) E
} catch (Exception e) {
; @* T9 @5 h) Q# w1 I4 k
//System.out.println(e);
/ b' x' H- M* }5 D6 k
e.printStackTrace();
5 c% `1 a% T$ |4 \
}
7 {5 k4 q7 F x; b& q
}
# a+ e& `9 n# P# }' S
}
0 P( p( q3 G* V* }& ^, ~; N
5 `9 m2 |0 k9 @" t3 K8 ~, j
. m" h8 U% D' f! v2 P. f' g; b
# s4 K. z3 z. T. A
3 Z8 k0 X- M' x
(3)合并单元格、格式化单元格等
! K7 n5 f# a5 \1 i! C; @: c
W' R7 \9 Z) j* t8 ]
$ i, R& z7 E h0 W, o' H/ T6 A
//合并单元格并在单元格中输入内容
( t! q. Y; P) @% E8 m
$ F- N& u. M! z' `3 T
package additionalproperty;
. f4 i7 B; q9 @
8 d: F9 T% J' M* |, b
import java.io.*;
; p# @- q1 | \* x; n- v* C/ m
import jxl.write.*;
+ g- w3 l/ F: \# p. N
import jxl.*;
, b) G; J( _8 B1 s' u1 o: m% n3 \
$ X3 @, Q A4 k) i* h
public class MergeCells {
; I! M# T2 q1 ]" }7 f. g5 p
public static void main(String [] args){
8 P# X7 O7 T" O9 d$ W
try{
/ |" T# f* K- w% K5 N
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
+ a# d G1 z& h: n# C& R! R" M C
WritableSheet sheet = book.createSheet("第一页", 0);
) u- ]3 P) T( G$ ^
sheet.mergeCells(3, 3, 6, 6); //合并单元格
2 ~0 q0 ?4 N( g% _! U7 | _
m' z2 L) x) ]+ q. [3 D
//设置填充内容的格式
% `, ] e7 `+ ]' D. v0 I. f3 u" v
WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
* W! U- K) I. t6 k: K0 ?; X
WritableCellFormat format = new WritableCellFormat(font);
* T* L8 k; v$ [* k. r/ u9 H
format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
, [: f" z1 s, n l8 L* c0 `
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
' e, t4 u% V* S/ X& \" Y' o: e& U' b
format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
4 b- V1 S5 w& l0 o
format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
$ h4 `4 R; ]+ v3 E; ~) `! T% B
% q4 r! H2 `4 E' ]$ f8 U
Label label = new Label(3, 3, "合并", format); //添加内容
2 z! J$ S0 q2 e+ Z5 i1 @
sheet.addCell(label);
9 r' p6 X, Y9 q) f/ r2 U, c
book.write();
. t' |; S g/ d! Y" c. ?( N G
book.close();
* Y2 \4 u, M9 H! P% y' b
}//end try
' `1 j0 S8 v, ^- c4 r. ^+ ?2 t
catch (Exception e){
' c$ g" h0 }! z8 v+ B' c
e.printStackTrace();
) g7 h( e8 t# h# T4 V7 f A
}
# t$ G" [: l; ~9 d3 l( P2 n- p
}
! y8 U% _4 \/ @$ p! A" v
}
' f# h* E5 _! D/ V0 m$ M- \6 o
0 |- }; I+ H; L l# X
+ h8 X. c. E# b$ }( t5 B
+ S$ Z& ^8 I) \! z; C1 D7 B1 b
(4)添加图片
0 S3 i3 ?5 F) s# E0 c9 n8 h
2 l( V, e; Z% A0 d9 ?+ G
JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
0 u8 k" ~ m0 [6 N+ E
( i6 W7 h# x6 T6 i/ H
0 J- @8 ]. h' l7 G: s+ x
//在工作表中添加图片
1 ^: M4 J( B: o: f2 Q
! T/ Q/ p) T$ p0 J/ c9 E: {& j: e' S
package handleimage;
1 @- Z9 T' W* U* L
. L- m! k) V# S9 ?* V0 z/ I) l, @
import java.io.*;
3 L1 h1 O( ~# t# f' b: s4 l+ @
import jxl.*;
- h' C7 M; b8 i( ]
import jxl.write.*;
, [/ Y+ ^8 }7 c$ q
1 ~0 y( R, |: L) V! j1 s
public class CreateImage {
5 f" y% B. |; X
public static void main(String [] args){
/ `3 M: N6 [8 V9 H9 x( f
try{
) \- W! R! }! o! G' a- p! e
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
, i; b W/ W- M2 R8 W9 I9 I
WritableSheet sheet = book.createSheet("第一页", 0);
3 e" y4 x- l" c7 @
WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
# E/ ]2 c; i3 v+ N' G8 u
new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
@' c; F" d" |" b% E: Q
sheet.addImage(image); //添加图片
8 K) z- P* g4 v1 d
5 V K# m5 j8 [5 H; j: d( ~
book.write();
( I5 B$ p5 P. u' Q, y' u: v
book.close();
3 w6 J) |8 J8 \: T/ S6 [
}//end try
9 S4 F% @1 C; E6 |9 m
catch (Exception e){ e.printStackTrace(); }
) { L! U; n5 S: y) F% v8 b- Y
}
" v' h$ Q# r; H5 W
}
4 o2 Z4 J" q: m+ S
复制代码
作者:
guoaecg
时间:
2013-8-11 10:41
Excel, 回复再看
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5