在线时间 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的使用方法。9 g D& q8 e\\" s. b
; w% e. Y7 j/ |/ J6 e4 A 1、环境配置+ Z$ V\\" z* Q# b% e$ ]% c, @% t4 e
6 K3 c1 G1 A. @ 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
, x/ x' f- |$ u) a5 p ) G! g4 W8 x9 H
下载完成的包解压之后,可以得到如下几个重要的文件:3 b+ C: z1 [ J: ^
. r5 I& y+ a- C% ^! R* z& l4 r (1)jxl.jar —— JExcelAPI 函数库;
8 X4 T/ Y5 O3 e0 \4 d. z : X# e\\" v- G6 m
(2)docs —— 帮助文档;8 I1 v+ N. _* l9 C9 Y# v: \) Y
0 I5 S% Q0 h' H7 f
(3)src —— 源码文件夹;
1 x3 |2 N; ] d1 P1 S6 D % E' d% K- d5 l* q( z. }: b1 c8 ~
将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
! S3 l6 j, f: T$ Q5 x( c
6 t8 D4 E6 K9 q4 _# K) T. i& B; q 2、Excel基础操作实例! T3 D- l* Q2 Y) }) X, @
3 d: L) S% q. s: w) z
(1) 创建Excel文件
8 S8 h7 o0 h: l- H2 h3 \ 6 t9 ? q, L9 r
/**读取Excel文件的内容 ) m. G& `4 |3 R& `
* @param file 待读取的文件 q: ~- n3 \\\" u' o; v: ]3 l/ x
* @return // 生成Excel的类 */0 g$ R7 S: P\\" F. H @/ p
package createxls;/ `\\" @ A# I- A$ ^7 ~' w
, l* s) i2 W3 o$ K) o4 n) k2 ] import java.io.File; 0 w. `* e' ]) ]% X* U: k6 O, c
7 T+ ^1 u- D( f0 T& x$ z
import jxl.Workbook;
1 G\\" x6 E) ~- E3 L+ c7 C import jxl.write.Label;
* M( y! { t* h; |: I' F% @% S import jxl.write.WritableSheet;
2 z9 p- o4 Q; a7 b* V# _ import jxl.write.WritableWorkbook; 5 G, G* V4 t2 y& u# c/ H
( I; [* j ?3 j2 @% K: p0 D& k* V
public class CreateXLS {
/ ~% e' r9 K6 D- r public static void main(String args[]) { ! t4 k0 R: V! h6 T7 Q% a
try {
8 k& X- }: h. Q // 打开文件
; n) {$ |5 k; w6 u WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
$ o4 @\\" u4 T& K. j4 u8 }: ^ // 生成名为“第一页”的工作表,参数0表示这是第一页
/ @/ O& w5 q, V- N+ d WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
7 t( k- ^( B: V4 H // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) $ O- K( i# C5 w; b; k* C- F1 \
// 以及单元格内容为test y. R V. H5 Q* Q$ p
Label label = new Label( 0 , 0 , " test " );
% P* i3 {5 M* x) C' d0 u: [, O\\" C
: Q' S# @0 y1 ~: b# O- c // 将定义好的单元格添加到工作表中 8 W! F1 p' X* L; J0 e
sheet.addCell(label); }5 ~' S- S3 k* ^% f\\" G
5 G. u( f; |6 V9 _0 F% e
// 写入数据并关闭文件
# ^: m7 D: c: j\\" n book.write();
6 {# e) z I4 [: n0 M \) r book.close();
\\" P& Y, u$ [/ O\\" T Q- Y3 t
* b# X& C# U2 I& g2 G U } catch (Exception e) {
( ~, T; n$ \+ n; d, |( ]2 r3 U$ {% i System.out.println(e);
2 _5 q L8 S9 i } 8 g2 f/ P5 C+ J- A$ u) f
} $ k1 q: n0 C- ]# Q# c
}
. |\\" X, }8 _% b5 i8 D; T- f6 Z6 F
' Q& u+ L* b9 s' S% k R( e+ ^ & ~# T1 o* B3 r' N$ B2 Y
8 Z) X0 W# K& H4 f( n# Z
(2)读Excel文件
; F3 E* ?4 q3 ^ ! L* [0 E$ o7 s\\" A1 S1 n& W
1 o. J! L( C5 `% A- V4 x
package readxls;5 K0 ?8 K8 U8 c5 d: O( Y ~
: O5 p! M! j8 b G6 B
//读取Excel的类 ! D9 R5 \' a; z
import java.io.File; 8 W% S$ H6 J3 f\\" f* C6 A
0 a' I7 r! ?. O S7 g0 {7 q7 U import jxl.Cell;
9 F2 I$ e0 I7 ^8 Q# R import jxl.Sheet; - o. U- X9 w5 Q( W& } m+ w
import jxl.Workbook; 3 B: k9 O+ ^3 m9 o1 @
& ^2 }* U- u$ ~6 Q$ Q' z\\" t
public class ReadXLS {
1 @- |+ e! b0 Q+ \% } public static void main(String args[]) {
1 F( ^# ]& ?\\" a8 P% _ try {
: u5 k( y5 W# I& [% C+ m Workbook book = Workbook.getWorkbook( new File( " test.xls " )); : H# f2 w& A) X: P/ n- B* r e1 u
// 获得第一个工作表对象 $ R- h5 w z8 s1 a S$ C7 f6 a
Sheet sheet = book.getSheet( 0 );
: p# c- ?& \7 ]\\" U3 O, W9 \ // 得到第一列第一行的单元格
% K! p, j' d& k) ^' _7 K Cell cell1 = sheet.getCell( 0 , 0 ); 4 E+ f# [% R! Q4 q3 E7 u& {
String result = cell1.getContents();
2 I9 k0 B\\" Z; l+ k- {. v1 T/ A8 U; R System.out.println(result);
) y# A* I H4 L- g book.close();
8 A$ H+ n0 w' u; w1 s\\" Z } catch (Exception e) {
; H5 [; N- ?' @8 l //System.out.println(e);
$ }% Y1 @\\" d2 }# W l; e' c e.printStackTrace();1 d8 |7 q4 |7 H/ n0 k
}
$ `1 Q# L0 D0 C# Y6 O- I+ S } + T, K+ w+ E. k
}
1 h: K6 l# u9 T1 e7 l; L, H k 4 N. k9 o1 u; c+ G7 K( L
$ |! T9 m1 n) _; k* b5 X3 D
9 f, E2 S2 |* f& W1 F# A% w 4 w1 E, E: e6 v
(3)合并单元格、格式化单元格等
( [ u( g% f+ a5 _( k ( [7 c- D' {3 f
0 k- A$ `' H$ a/ w
//合并单元格并在单元格中输入内容
+ t3 t# V( D* Z. Q* w
* X4 \\\" ^. E# u; |- i6 Y package additionalproperty;
0 N$ T+ D1 g& k E' `
' { D4 c' Z0 w3 R0 C import java.io.*;
+ d0 G& {( Q* { import jxl.write.*;% i\\" @. |) y) n9 V6 ]5 L9 C( o5 T
import jxl.*;
: `- a7 `' G7 u) k / v( T& ?2 r+ S& G
public class MergeCells {5 F4 ~8 t1 N' s, l. A2 m# r0 d7 g0 L4 d
public static void main(String [] args){\\" q4 H3 @4 _8 f5 u; ^
try{+ L1 v& j3 d0 Q: B% B# [
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
0 o( A3 u/ D A; w WritableSheet sheet = book.createSheet("第一页", 0);
* p$ M4 }' A& p: z sheet.mergeCells(3, 3, 6, 6); //合并单元格
# r! ]\\" J7 J' z5 p l 9 f; G5 ?0 @9 \9 g' h4 N
//设置填充内容的格式
2 ~! L# k7 k: z( G* k WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
: c- v. X, [/ v; q. [ WritableCellFormat format = new WritableCellFormat(font);
! t* `: m7 ^9 z( o6 { format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中) n3 e- R. H- B6 s+ c. c
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
: v6 Q/ b\\" s$ S' E format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式; w. V& r# ^; @6 c
format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式 N( [& M' K8 v5 Y0 z\\" X/ D2 c: O
6 I7 v4 H1 h) q% f8 n
Label label = new Label(3, 3, "合并", format); //添加内容
- [6 C0 h+ _+ l7 A8 O( b- T sheet.addCell(label);/ P) U2 a: d6 o
book.write();4 E' v* K! c- e% a. f
book.close();
8 ?8 ]( |* O$ F! c' l3 m6 n( X\\" Y( n }//end try
: I7 j! ^$ P. G7 G$ j( n catch (Exception e){) _+ c1 _. l% S+ _: n6 {5 j, M
e.printStackTrace();. j8 O\\" y' s: l- M4 u. R
}
8 ^) a& U1 \9 b# F/ e1 Z }! V: N3 N& m/ W. u$ T: {
}
\\" r2 U2 o( q% c+ n4 d% l2 O6 f5 U + o6 H/ F/ q3 d
- a* }% i; f1 L1 Q\\" c- j7 j8 T 8 C8 x$ q2 Y2 V# S9 M2 h
(4)添加图片
8 V# O/ C* z: E; O\\" B; I9 T9 j 2 S) `9 B\\" K! Y( d5 W1 B: d
JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。4 X ]+ ^9 d7 [- o* t- _\\" V
: m5 J4 E B; [* i
E! ]3 C& P; n. V6 E5 V- ]: ~ //在工作表中添加图片
: d8 i( S: g' M/ `9 j - P, x$ _0 @3 ~- V6 W
package handleimage;
; j# A9 S# f3 S% D1 ~; ?
8 ^, L8 F\\" v9 ?\\" q5 _ import java.io.*;0 [6 e* O, d: o
import jxl.*;
$ p6 U\\" \) U0 a6 C import jxl.write.*;
' y4 R% F3 ~6 m* y , @1 _4 r6 P* ~# w% V( y/ J2 y
public class CreateImage {
& W/ {0 c# U1 V- j/ C public static void main(String [] args){+ K, j- y- W% h\\" h- D: _
try{. z3 d6 N+ p/ C
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
$ J+ J) j& Y; V' t, u WritableSheet sheet = book.createSheet("第一页", 0);
9 ^' \! S' h\\" j WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
2 A( ~' Q3 W! t8 N- q& Y4 ] new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
7 H) X6 S! ~8 I sheet.addImage(image); //添加图片3 P7 Q1 l _) H9 g) H% X
1 w\\" a/ `% r; B e
book.write();9 S4 n: Z1 e) Y) ?$ p! b6 Z
book.close();# b- }* t L4 }9 g3 x( N
}//end try: O3 B% [3 R: q6 N2 Y& V4 k( N( Y
catch (Exception e){ e.printStackTrace(); }
a* c# t- ]: A1 e4 F\\" U }1 K4 l( |% P) x+ s
}
. O9 r9 `% r7 s/ `
zan