在线时间 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的使用方法。2 E- i4 X$ h& F v\\" U
; J0 K) F' A1 y* {9 m\\" G3 T% m
1、环境配置5 ?5 Q$ e! i( `$ O\\" p) |\\" s
% S( C% b9 o5 o2 h4 r; j 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
; w; W9 W, \: T& {5 a
' L4 ?3 F/ w4 ?3 y: Y8 J8 n 下载完成的包解压之后,可以得到如下几个重要的文件:& t4 k8 W8 ]$ Q1 W) n7 u
\\" ~1 H' j9 m+ A9 Z\\" k
(1)jxl.jar —— JExcelAPI 函数库;
5 U5 x8 s* v0 I+ k+ t$ v6 ~; Q* M; Y
2 A! ]/ R8 A\\" e! d m: J' H: ~ (2)docs —— 帮助文档;3 m, q- R6 M' i6 k0 W
/ B# u+ P) V* X- }
(3)src —— 源码文件夹;
0 I7 b! w, y/ @, W 9 G6 r; Y: R8 U: W4 _\\" w5 L
将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。; I8 c& c0 W m. i% t
. m- r$ ^# e\\" A& }5 ^* { 2、Excel基础操作实例; i/ \/ o$ O d6 a/ E; B% ~. X
/ N) C+ S3 p. i) I, d( M- w; E
(1) 创建Excel文件 0 x, k: A7 h3 f* ]
% G$ L1 p$ O$ ^* f1 D /**读取Excel文件的内容 # ?, B; ^: J* H+ ?1 y* e' X
* @param file 待读取的文件
, J1 y9 N6 ?1 f8 q( w9 h4 `2 q2 S * @return // 生成Excel的类 */
- p A' B/ Q; \; { package createxls;
/ i+ B! h5 Q% y' \4 i. i( \0 U 4 V/ L; m% e( i6 I% L
import java.io.File;
8 K7 m0 m4 o5 |0 p9 |5 l / S$ C& m& h4 z! A. f! S
import jxl.Workbook;
( [\\" A- z( l+ i; v D import jxl.write.Label;
: e2 |$ |7 w/ n& S, V, G1 j, P import jxl.write.WritableSheet; ) |$ u* [9 ~: Z+ H3 k6 N
import jxl.write.WritableWorkbook;
2 I+ c( `/ {9 I! q\\" ~: l. A# R
6 a2 O) `% _4 |; z public class CreateXLS {
X# F* m0 c- h' V9 f3 ] public static void main(String args[]) { 2 l7 V7 H' O$ {6 J2 ]
try {
\! {$ P# b, E\\" p% A // 打开文件
' B3 r6 E( N' c! V WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
: [: ~# X, ?5 D- V. r' q // 生成名为“第一页”的工作表,参数0表示这是第一页 7 M3 g [& G) d
WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); 0 B4 }+ C' l: e, r& W$ @ t
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
* J3 }6 G9 x\\" H# U/ F. o! n. I // 以及单元格内容为test
, _! W4 [( `1 j# j* L Label label = new Label( 0 , 0 , " test " );
+ J& i# J% f& q9 D+ E 9 M9 q! z2 {$ M8 L: r
// 将定义好的单元格添加到工作表中
1 S3 g# N N4 q+ ^+ ~* f sheet.addCell(label);
# a) q5 \& N ^) {0 l % P# A: n% V- ?9 F' V: ^
// 写入数据并关闭文件
2 I6 z' R4 X l& g- q book.write();
7 I, Q7 |$ B3 y& o book.close(); & v4 l. O- o! P6 H% [% _
1 }/ E( C) V7 T1 ~
} catch (Exception e) {
: D7 d) J4 m4 C/ O, ^ System.out.println(e); . x( U8 @& W5 Y ^# t1 b& w
}
- Y5 D' V8 P. V9 ^ }
2 ?) Z* o2 f4 `' s7 {* p }
4 G& W; v) d, {! Y4 H
' \7 j+ A8 M; t 7 c- y; N/ g1 z3 d; O& ^
/ i' f1 X$ F9 I4 g0 f) v$ W8 M\\" {
(2)读Excel文件8 c\\" H\\" ]! D$ R$ c
1 h\\" {: a- U! L3 C4 Z
( Y8 Q8 {5 S$ A3 w; P- b/ B package readxls;) s( ~/ ?5 k( h3 W6 W$ b2 H+ r
- X\\" Q- q/ c; k9 _* N$ O
//读取Excel的类 , \0 b0 n. V: C+ D! J/ t
import java.io.File; , z# a' u' }, W' i: i4 ^1 J: f
7 H3 ]- [; r) f; r
import jxl.Cell;
0 r C; W: E\\" o6 i: B( u import jxl.Sheet; ; {- R1 j' S5 {* @. H# O
import jxl.Workbook; 0 B. Z' s2 j) h; W) D5 v9 i
9 ~& U5 }\\" F( h2 Q! f! Z public class ReadXLS { 7 ~( D6 Y; k1 ]4 g7 [ I
public static void main(String args[]) {
; B8 h+ S8 F8 Y try {
2 m N6 ?& s+ ^* p9 L# f Workbook book = Workbook.getWorkbook( new File( " test.xls " )); 0 l$ P7 {2 E! z: i+ ~\\" Z% P0 g! h\\" w6 ^6 q
// 获得第一个工作表对象 1 [! ?% d3 i6 b5 ^5 G
Sheet sheet = book.getSheet( 0 ); : ]3 h B6 h0 s
// 得到第一列第一行的单元格
: m8 N* l4 A' k% _, C$ U) g Cell cell1 = sheet.getCell( 0 , 0 ); 6 Z, V1 f+ I. X. e: s( U
String result = cell1.getContents(); : d& k$ s% G0 v- r7 }3 t4 W1 E
System.out.println(result); ) |% s9 v: z* x& @7 f/ x- [
book.close(); 4 l& q4 R. D: [+ C1 `% p
} catch (Exception e) { ( i4 Q Q! y$ R6 h T
//System.out.println(e);
% `1 m# }8 H0 i# s- S+ E\\" s# g6 f e.printStackTrace();
! S2 ^. \: o1 B0 N) s }
' \! Z2 T |) k } ( c- l6 ~; d5 X& n$ U
}, A* x$ f\\" H( ^( s
7 L P. {; `: [- i2 T3 q# d% v- B
\\" b( J1 ~) s* Z, h$ h$ p
3 t; }. o6 }- }3 F2 Q2 d4 q : k( |3 {& z& R
(3)合并单元格、格式化单元格等
+ _4 t4 d# u# m8 t2 S $ X& r- a4 |9 @% y* r
* E( n4 Y- U\\" P1 y //合并单元格并在单元格中输入内容
0 h5 _1 a' V( ^) Z : S, ~9 m) u, |$ |$ [$ Y& ~
package additionalproperty;4 P0 F/ Q4 L8 M
! u3 i7 r- ^2 Z6 S! z/ {
import java.io.*;
) g* W9 O9 {+ D4 @( D; f import jxl.write.*;- {* S. C/ T/ ?3 X+ H/ M
import jxl.*;& C- Q7 w2 d; [: O
$ Y: E. t# y6 h5 m\\" U3 Q* H4 i
public class MergeCells { \. X9 F6 _4 P\\" X/ b0 m
public static void main(String [] args){
: f ~5 e\\" j; k6 w& U7 { try{3 T& q$ f; O3 n& e
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));, r8 |7 T6 x. J Y
WritableSheet sheet = book.createSheet("第一页", 0);
/ c. Z& u9 D9 p sheet.mergeCells(3, 3, 6, 6); //合并单元格
# t* _6 R- Z- E5 Q) ^ E
& J* Z l4 E0 ]! O9 ` //设置填充内容的格式2 F% ]6 i- [& @$ k
WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
~: }9 Y& Y- o1 s WritableCellFormat format = new WritableCellFormat(font);
$ g! {& t% o; l8 I format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中8 H, s/ W H0 v) } y
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中# o3 K# ?\\" s! _, A( ?; H
format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
3 R5 A8 |$ @7 {0 [6 l0 G) D8 `, u format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式\\" k# {3 p( z) E: N8 \$ @
* U( ?! [$ ]' \* `
Label label = new Label(3, 3, "合并", format); //添加内容/ h- @$ P' |$ j) k
sheet.addCell(label);
5 W T% R# j& d& v/ m/ f' s book.write();
3 l4 @7 u5 h7 Q! t6 w7 g book.close();8 ]) }/ d\\" \! ~5 l* [
}//end try
! A, A) Z: F. a1 Q2 E catch (Exception e){
# H7 A6 I U. T6 B\\" D( ~ e.printStackTrace();
1 p) \- K: x# B }' {( U0 ?1 F' G+ @8 h7 o' ?( t7 a
}8 }( `4 W8 I+ L. R\\" C! W* G
}
; t. a( l ~' r7 V' {
0 [: l* F4 T7 v\\" j9 I' F $ g! d: r+ y8 s\\" P
4 o* W: X# M0 v, b! | (4)添加图片
7 B4 [' A$ s, R% H# f\\" \4 _ 2 ~8 G3 L7 p1 P' n$ c2 Y) _
JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
& N0 @3 K! k( @- Q! Z, u9 x
. N# i7 Q' O9 s1 D3 f; ?% [ 2 t7 ^) {6 r, q, o; p/ B- w. P* @ f
//在工作表中添加图片
1 n- f! j2 j0 ~
2 L4 T G, X5 s L9 O\\" B9 X: R; { package handleimage;5 [& r+ b9 C8 ?) [0 ~0 [& j
- y! R# l* k9 E1 C! h! O
import java.io.*;) v& Y8 S\\" g% m. t# N9 b+ Y
import jxl.*;
$ U; a4 c1 B5 i: c import jxl.write.*;
+ S4 y8 p5 U F, p; W1 O) A
- z! g2 Q* i8 p public class CreateImage {
5 Z% p0 i, [\\" X( Y public static void main(String [] args){
0 [# P# v6 A8 v% h( ^ try{8 n. {, Y; C9 C8 n. C! b$ [
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- m6 [4 @9 F2 Y1 c1 O WritableSheet sheet = book.createSheet("第一页", 0);' Z6 N0 D+ Y9 p% V5 E m
WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
0 U* O# t6 ^, K1 |3 q new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));, Q' x9 r4 j% n$ ~: d7 \
sheet.addImage(image); //添加图片
# q. y M4 H. U 8 {$ G- T$ B2 {! n
book.write();4 |6 Q, b# h5 X% N5 N$ _- m\\" y
book.close();& I( Y) }2 v% F) I9 K
}//end try
/ n# u8 S7 b2 k\\" {# a( N0 ?/ q6 z catch (Exception e){ e.printStackTrace(); }
0 z, v0 Q* m1 W t& A+ i) m }) m( L6 V: s1 i% p5 u: F4 e- _* n
}
* x# H7 V5 [3 ]/ L$ R! m) k
zan