数学建模社区-数学中国
标题:
【转】Java操作Excel方法详解
[打印本页]
作者:
wangzheng3056
时间:
2013-8-9 11:28
标题:
【转】Java操作Excel方法详解
JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。
$ s6 V: ^: h& l8 @# @
; |! f& U: H2 V" m) A
1、环境配置
2 f3 c6 v3 c: K5 B# I
3 E# O5 ]7 E9 g. R5 I
如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
2 q7 r3 ^$ i w
7 R2 M: W6 ?6 s
下载完成的包解压之后,可以得到如下几个重要的文件:
4 G4 Y1 H9 y& F) |; W. C
3 m# x+ }0 Z& W: s
(1)jxl.jar —— JExcelAPI 函数库;
& `0 H- ?) D3 {5 m4 M, l6 Z3 V9 E
* s- @* C8 j% x' b0 L# M
(2)docs —— 帮助文档;
1 {4 a( {/ [3 g" q
3 l8 B1 W. e8 F" @; [& B
(3)src —— 源码文件夹;
3 u* s$ j8 ]8 ~- z7 k/ _
2 ^1 {1 g8 W& ?0 R- H, H
将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
+ ?0 L" y- j& x+ q
; k) M5 `% ~/ n1 i. ^ m, w
2、Excel基础操作实例
/ {+ o" M# U+ _- d$ P
) B: |7 {/ v& @% w2 s. d# E
(1) 创建Excel文件
$ c! O* y2 M" n1 j
% K3 e1 B3 T$ ~, u5 ^0 q1 u
/**读取Excel文件的内容
9 k4 y9 \; O b5 C- Y p2 m
* @param file 待读取的文件
' y6 q; L2 `0 t: i
* @return // 生成Excel的类 */
- i. c- ~' p' ~( T
package createxls;
) J- t& S1 M7 x+ I/ Q
6 y7 }) o9 t- b
import java.io.File;
& f6 h4 L$ A# l% s% q8 S$ ?
( T; H( p: ?4 A( i5 d8 a" w
import jxl.Workbook;
" O, e4 v1 g4 g; Z3 H
import jxl.write.Label;
$ q' A' u. q3 y; P
import jxl.write.WritableSheet;
* w, |; f q3 r- h) Z* N
import jxl.write.WritableWorkbook;
}* J( d4 }6 Y7 f
! c4 Z# D$ J* D% g2 I Q6 |
public class CreateXLS {
+ a- V S* c4 z
public static void main(String args[]) {
9 L+ H5 T' K. Y/ N: z1 o
try {
/ B) E @9 T5 ?# P1 @% ~' T
// 打开文件
" m X) J: C$ Q
WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
8 _ l9 f$ K- E5 j$ X* k# ]2 v5 d
// 生成名为“第一页”的工作表,参数0表示这是第一页
* c" ^ z0 D H) i- [& D; s
WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
( G @5 @, |8 _+ B, M# e$ m. u
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
. L! S. m7 J3 |2 W* d6 t- O4 N
// 以及单元格内容为test
( Z% L4 ~2 E; ?8 o' Z4 J' Z
Label label = new Label( 0 , 0 , " test " );
, [: g$ g M( g6 n6 Q. }6 _
7 `7 J: B; e' t: M/ H
// 将定义好的单元格添加到工作表中
7 H% [; x9 v; O2 u( ^+ u
sheet.addCell(label);
& C; |. \5 ?" x
3 [5 s6 J0 ^# A8 {2 L
// 写入数据并关闭文件
$ I3 h/ H: f- F! n0 H
book.write();
) y @3 a1 J9 p, L! g
book.close();
% o( t* X% O8 S/ a5 `/ T8 S' p
! k/ X5 r/ B9 W- E" M. H
} catch (Exception e) {
" _2 ~) w! Q4 ~5 w4 T( E$ Z' M, m
System.out.println(e);
+ B9 [ g o6 B7 e: ?4 e
}
( ~3 O, @9 `3 _ N3 T: \
}
& p% M5 n7 g) u) d9 x( {
}
- r$ V6 O2 u& |3 u0 A
1 H: T, E5 [9 ^! Q; P$ L: j+ R# [. v% Y
Z) J, C! G4 e, l. O, d6 q
; g9 x1 h B2 Y0 |, k8 o- D4 U3 n
(2)读Excel文件
( a( L9 s% O3 _: [
# z9 J+ v$ g& H% z
+ `) J8 h5 F P/ E9 n: l, U
package readxls;
, k Q O: x4 \4 `+ M5 r
0 _% I5 _3 Z- ]- w' n# i! Z
//读取Excel的类
+ n$ H3 x8 [7 W6 P" T2 V- v+ V. z o
import java.io.File;
# R: M# c0 c. N* ~% S
. x3 ^( a9 B% Q' _$ d. ]" K
import jxl.Cell;
# C* h r8 U6 c0 W7 x- P# _
import jxl.Sheet;
$ g3 c3 h' }# l7 u9 _
import jxl.Workbook;
! c1 l; l6 p9 u3 E
5 e. q5 } i% b
public class ReadXLS {
% m* U$ ^3 C6 w2 c: j
public static void main(String args[]) {
5 O4 a) n8 J+ e# O, e( R n
try {
9 _3 [6 ^8 L+ t+ W" H! L3 a" _1 J
Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
" o. t6 R- R" J- m- v: o
// 获得第一个工作表对象
) c/ R, i8 F8 C% p/ p+ b! A1 h
Sheet sheet = book.getSheet( 0 );
' o& _) I8 `9 i/ }! @) l6 c
// 得到第一列第一行的单元格
% H* s. V( _" Z9 q
Cell cell1 = sheet.getCell( 0 , 0 );
' G0 \ ^. ]; q! t9 q1 T
String result = cell1.getContents();
( P% R, q9 J% B7 |( F3 {- E; ~! E/ m
System.out.println(result);
! T" t6 |6 E% H g' c
book.close();
/ z3 [7 l, M& O% s/ W( q
} catch (Exception e) {
7 |" f4 T1 l. S/ x2 j7 i
//System.out.println(e);
: n$ ^# s: a' p' d
e.printStackTrace();
, X" H3 t! k' @0 D' Y3 R5 h
}
4 f- ]2 J" ?5 C+ E2 H( F( W. _
}
; D/ [; P7 t% ^/ Q5 Q# G6 c
}
: C/ G& n) J+ U9 B$ p
' g% s; I( H! ~+ e1 P P( l
& R# E; X% K/ e- d1 w
0 G; w7 |' z6 P# S* n! ]7 ^
! a% c/ B' y& ?
(3)合并单元格、格式化单元格等
: B: q) x1 Q7 e4 ~0 B3 B9 K5 j( L
) s7 b1 f9 S6 W; Q) V, F/ K
" y7 a$ o2 O7 A# E2 w! O
//合并单元格并在单元格中输入内容
2 f7 I5 J0 k3 k
: [, x O. t$ h8 c0 v
package additionalproperty;
0 c `5 Z. ?( a5 N8 S
" r5 d( H; W# f7 g! `! |2 {+ q' t! }
import java.io.*;
. P- H& [1 b( _! l' H8 h
import jxl.write.*;
( {8 j' \5 {2 k v; K
import jxl.*;
8 E& b5 a, ~6 r$ j) j
! o( U1 D8 t) F: D3 K" Z4 P
public class MergeCells {
/ c8 `- n; a; {
public static void main(String [] args){
. B: Q+ r, u4 q0 K
try{
; I2 W! F/ F! Q- X! Y; U
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
! L( A/ r2 l/ L- M) X
WritableSheet sheet = book.createSheet("第一页", 0);
9 T7 d. P) w. _% F) W$ u
sheet.mergeCells(3, 3, 6, 6); //合并单元格
) o7 X M7 w# }8 r5 j) u% M
0 q' C7 ~/ t( P( w; t, h
//设置填充内容的格式
9 M& S4 ?, s7 }, L
WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
; ^! o: q5 R) G' E q0 c
WritableCellFormat format = new WritableCellFormat(font);
# S7 ]+ g' f' x1 D9 V9 Y
format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
: i3 }3 o9 `) R0 G7 F) U4 _+ |
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
2 i3 N3 p# O& Z- Z
format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
# w* P" g5 g# o g
format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
) ?, c3 ~% }$ M8 m
) r7 E3 [- j" {( t
Label label = new Label(3, 3, "合并", format); //添加内容
3 x6 [! B: b' l( j$ ~& a. K
sheet.addCell(label);
9 j6 Y5 _' l4 i- V+ Q. m' n
book.write();
1 Y1 {% p8 [- g, c o4 x! k4 {; S
book.close();
4 x$ T0 N8 W+ ~1 ?8 C9 R( Q
}//end try
0 z2 F( w0 i7 @, w3 i/ @9 I1 r
catch (Exception e){
" b0 T1 h1 u! P1 m9 y7 d5 P' }
e.printStackTrace();
- L! ?' Z# T2 r
}
( {. m5 {1 K2 s* g
}
6 ^* O8 v" C6 h8 H6 q
}
0 @) g n/ l1 l7 F
) b; U# i. i. W5 d
4 y& Y- c$ _1 H u- O6 P# {
0 A& V8 H; E3 c0 w( _# X
(4)添加图片
. _$ [& e1 |8 ]( T+ V/ \" z
0 ^! ]( C0 `4 }
JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
* r" ^' S9 Z/ W& u
" R4 g& S6 T6 u/ ^
; @% @4 b1 X8 [; V9 G% Y
//在工作表中添加图片
, M6 ]8 s5 B. j' A( x
( A1 f, o; q! V% \
package handleimage;
5 n% N T+ O0 _ b6 [2 a, G
# K6 ?2 E( A2 P
import java.io.*;
9 l- C/ r; A# x$ I: q: z. O9 ^
import jxl.*;
) K) y U( A' N
import jxl.write.*;
, P* S$ ?" l/ |. @
- g2 Y4 z1 X S) j, X
public class CreateImage {
# t- `# G b* D$ L' q% y
public static void main(String [] args){
$ @, l8 c4 P; K: d
try{
# Y3 J6 I" M) W8 b: P1 b
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
0 z! z) v# D- i+ J& K
WritableSheet sheet = book.createSheet("第一页", 0);
5 b o: ~7 e, q0 M/ H$ s
WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
9 ^! E6 j0 m7 c8 O4 S+ u7 G. w
new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
% L4 M# @9 q. o; H9 M
sheet.addImage(image); //添加图片
3 N2 v' n, P$ t! Q
& W1 |/ K. R8 o7 F) r
book.write();
O# e& S' J0 L0 F# j P# l
book.close();
' x7 K1 R, B x5 y5 K+ Y" }
}//end try
7 L$ v# r3 ~3 f' ?" f
catch (Exception e){ e.printStackTrace(); }
A+ t. r: b! n/ ^$ W. @9 G' C ^
}
& u3 n( {) I# O8 [# m8 @8 `
}
4 ^" x. O" s2 o* j6 }
复制代码
作者:
guoaecg
时间:
2013-8-11 10:41
Excel, 回复再看
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5