在线时间 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的使用方法。% C' s$ Y' j' F. g' D
% h6 y! [\\" O4 w+ _ 1、环境配置
+ j0 \3 T9 @. q1 ]9 ? : U. P. m; \5 K( n
如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html* e9 A# q7 ?8 K
A) C8 f( ]& ~+ g5 n4 i; p
下载完成的包解压之后,可以得到如下几个重要的文件:) \0 O. c# ]+ n4 V* P( ^8 m
6 @& f y\\" X\\" v9 |7 o
(1)jxl.jar —— JExcelAPI 函数库;
! z. T3 {4 J- |. `5 e# \
( J) @. v3 h- `$ }: H) P2 r+ F+ c (2)docs —— 帮助文档;1 a+ }, n0 o; R, Y4 a0 ]
6 a, \& t2 G5 |: ^1 N* @) @4 `2 L
(3)src —— 源码文件夹;( L5 K6 u' j. X K) `/ e, i
\\" M) W9 l\\" J. c R/ ~; I1 B
将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
, ~( G7 R( B5 F: L
. b& h7 W0 U3 }0 X9 Q1 | 2、Excel基础操作实例
7 H: s9 Q; K/ N. m8 r. n5 u& Z 7 W J) z' |7 D4 }
(1) 创建Excel文件
! {( B9 j3 T8 Y4 Y. H4 c
# r8 K4 m4 V\\" l$ F) C& j8 t /**读取Excel文件的内容
* d8 f+ F) b5 K! `. @ * @param file 待读取的文件
9 J; ~2 q) h5 E' v * @return // 生成Excel的类 */
9 p/ a4 P* {, I package createxls;! g1 v6 M4 X/ N* M
; E/ v- D7 B1 C3 W5 D( G7 g! G
import java.io.File;
9 c0 d3 s5 C5 I( A$ B
% y# W7 p# q$ X0 v import jxl.Workbook;
3 r# Q. X) ?; S\\" f: {6 l8 } import jxl.write.Label; [* j* S( f) K
import jxl.write.WritableSheet; # t% p- Z1 u) k! y7 ]
import jxl.write.WritableWorkbook;
; h: a, l, }; ?, P 2 ^5 K' G6 I, R- |+ R
public class CreateXLS {
5 i, ]) Q3 b7 X\\" l; u! d, P5 z6 [ public static void main(String args[]) {
- J\\" R; }; ^; X# U7 }( k try { 2 a; s6 q0 Y# L8 \' ^+ A
// 打开文件
& {* M\\" m& C( Y; |' D0 i: D WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
. j! z2 ~- F1 j\\" h' n+ o& d // 生成名为“第一页”的工作表,参数0表示这是第一页 2 t' ~3 T; A8 Z7 h
WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
4 |9 n, v\\" [. G4 _% ^% v) f1 N$ M // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
' r: H1 m. p3 [) v+ M l' L // 以及单元格内容为test - _0 n& e4 r. { ]; A: c) N
Label label = new Label( 0 , 0 , " test " ); 6 O' ], g2 X0 S, |
) S' O% \' P2 v7 T k // 将定义好的单元格添加到工作表中
\\" p9 w9 [6 @ B) |5 N: o sheet.addCell(label);
: ]* C% A0 |' Q$ F) p. l
1 d* g; P2 u5 Q, i // 写入数据并关闭文件
2 q! R3 k. E! I$ T book.write(); # I3 L4 `$ c b' K\\" D y4 x* s
book.close(); 5 x\\" x/ S5 L0 d$ R; T8 T# g* Z
* b$ S1 U9 K\\" ]. \
} catch (Exception e) {
- b& y/ s\\" u# m* [! N System.out.println(e);
% l$ Q4 x! g% X- \ } + E% f I1 E: E# E5 t U* Z
} * b' P4 w& J( ~- `0 s
}
2 M+ N0 K, q/ b4 w0 d( D7 b
* t$ l\\" b H! X E
* x\\" I& R1 T) G$ ~' D & b; q% C2 n- g3 q$ o\\" r `# Q
(2)读Excel文件
: v' `! c; x* z: q# H+ I 8 F: L. S& G9 F# T
# `' v\\" U# O2 x; ?$ U# C9 i
package readxls;
8 }% k6 Y# l/ t/ b 1 I, q9 B% ^ J& o+ m& N7 C$ [/ s
//读取Excel的类
4 l# O, g/ q4 j, u8 x0 e import java.io.File; ) ?' ~# d6 F9 `/ m* A4 y
2 k) v# h4 a1 l$ a$ [
import jxl.Cell; w$ P/ B/ P J; \* h% }
import jxl.Sheet; 7 A1 h/ z/ z. r
import jxl.Workbook;
, n+ T5 W6 q2 V- {! J
/ r, ] \: `2 _, Q* A; i public class ReadXLS { : [9 u8 A: g2 w\\" K6 s# ~
public static void main(String args[]) {
' P: P4 }; R: B) P( w: o3 J try {
, _% ?7 x\\" M8 h8 \! R; \8 R\\" g Workbook book = Workbook.getWorkbook( new File( " test.xls " )); ) x\\" ~4 k4 ?+ C; B* h& e& P) u* X1 m
// 获得第一个工作表对象
9 t! T$ I' o l5 U: n Sheet sheet = book.getSheet( 0 );
4 y* q0 X( ^& ~\\" g. ^+ U\\" I // 得到第一列第一行的单元格
. D0 e+ m. S* x, R Cell cell1 = sheet.getCell( 0 , 0 );
7 y9 D9 Y' B* U/ V& P7 O String result = cell1.getContents();
9 u6 K7 f% ` t System.out.println(result);
9 P$ M, X; V1 Q' D: F& V( X8 h book.close(); * T/ A/ ?6 t- \1 R- ]- j; D
} catch (Exception e) {
# f3 t8 A, [: A9 K //System.out.println(e);
) u0 m% D0 A0 g e.printStackTrace();
! Y: Q0 A! Y* C }
8 A, c6 ?3 E. P }
0 J! r1 s5 F+ H* ?% e }) ^; w# D$ G; S8 j( N- ]
/ `! [+ i( `# \1 A. s
\\" Z6 i2 u) |% N5 J T
7 N9 b. Y& W' ?. d
+ r t8 T8 M\\" ?; h4 U (3)合并单元格、格式化单元格等
% [% @% s2 ?2 x0 T% i5 y; f
' k% w+ a0 j* A3 @$ ~
6 [5 i5 _8 R- w {* w: p6 ^ //合并单元格并在单元格中输入内容8 ? j: q+ H0 H
. E\\" e5 A9 O7 `- t
package additionalproperty;5 `/ A8 G\\" R& d; ^9 W( t( F) S& ]* y
$ P! k# Y/ Q$ _$ o$ z import java.io.*;3 o+ _) i: y5 S8 g5 h: U4 ]
import jxl.write.*;( `) k\\" N0 N1 H' C9 h0 x$ j$ l
import jxl.*;
/ [2 v( v5 ^8 w9 Q0 V2 G
$ F1 x9 P. R\\" V+ ? public class MergeCells {# B& ?1 M% L6 _
public static void main(String [] args){
0 A. v$ @: e) M+ T try{
1 C4 \- N1 X( H t WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));3 g4 y. l2 h6 [
WritableSheet sheet = book.createSheet("第一页", 0);
0 w# }) T- K& V sheet.mergeCells(3, 3, 6, 6); //合并单元格
$ W# ?' g( a5 d+ W% q
& S# \) S' f; O8 l0 j //设置填充内容的格式
: @* d9 t\\" ], ^2 m\\" t9 m3 _ WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
\\" o3 |4 Q$ L8 f$ t/ O0 I: t5 T9 T WritableCellFormat format = new WritableCellFormat(font);
( v2 E: t# N5 A0 H format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
5 b4 ~! O& [8 W7 O _: D format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
. W4 S1 p6 ?+ c1 o& a format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式) q+ g6 D8 r. v/ O& S( O
format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
# m7 @3 B0 {- G, S 6 r1 Y' @$ `: D0 a4 Y! R
Label label = new Label(3, 3, "合并", format); //添加内容
* W2 D0 i8 H- _# f) i2 s sheet.addCell(label);3 z* H: r! x5 o
book.write();# w' K# `) A3 t) ~4 a
book.close();& L# {( g- h. T4 R6 [\\" c. r
}//end try
: w+ K1 w( B& W7 j# b\\" \, k catch (Exception e){+ T/ T/ J1 F# {! {2 _0 _0 ~
e.printStackTrace();
4 H& H; U, f6 N% ~! R }! q+ v& g4 N N& n/ J3 N1 I; @6 {. J
}3 H0 V1 |1 s5 r3 G# ]4 o
}
: Z& f/ B' M, e+ a! y
$ g: J4 ^- F) T. K& Y: x 5 F\\" Z$ |4 t4 A5 g5 z% B
: [1 t6 J @8 V: e( [
(4)添加图片
[& g\\" o+ D2 I : _! m: K' `5 ]2 Y& K! s1 m
JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
6 ^5 a4 B* d\\" L + X% l1 `$ m! g/ h8 e: D- X1 N/ U
6 C5 P6 b$ |/ N; s4 ^& @ //在工作表中添加图片
6 X J. B9 Y! u6 u4 u4 y
1 L; M, ?3 R G* x0 Q3 H+ N package handleimage;
* l8 n( O8 U7 ^6 m7 a
[1 W; ~6 q4 V! i Q [) ] import java.io.*;
! w\\" J6 ~7 K% Q2 D( X1 y1 r& ~ import jxl.*;
% C1 b) K1 N/ W- d import jxl.write.*;
8 ]9 l$ M* Q% U+ w) M\\" F. e+ ]8 n
+ t% |' D* C, ^ O public class CreateImage {' [' V l, G$ B H
public static void main(String [] args){- v% E% S+ z+ A. e
try{+ ]( k3 Z+ u) J1 O. ~
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));- \; S# W4 H6 a; s& j- p% U' P
WritableSheet sheet = book.createSheet("第一页", 0);) e; F( X6 }% m6 H0 H
WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
5 a! @0 J; n* f7 z0 @/ I new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
% ]+ z' m8 @1 ~0 d) `, j sheet.addImage(image); //添加图片
' _0 c- c+ F8 j4 D/ Y 5 m7 T9 w+ e p# A/ `* V6 l/ A0 H
book.write();+ M; @2 d' J/ `4 G8 Q\\" G5 n
book.close();/ e G% B4 J; S# H
}//end try
' Y* I- i. C. z/ i4 w: N s catch (Exception e){ e.printStackTrace(); }) ?! p( ]3 V! V+ f9 x8 e
}
0 T2 c% ]& k* `6 |: \5 m) B% v }
4 v4 K9 H, G3 L4 v, y$ z- Z0 g
zan