- 在线时间
- 491 小时
- 最后登录
- 2026-9-17
- 注册时间
- 2013-2-28
- 听众数
- 118
- 收听数
- 46
- 能力
- 268 分
- 体力
- 39229 点
- 威望
- 1340 点
- 阅读权限
- 255
- 积分
- 31234
- 相册
- 2
- 日志
- 0
- 记录
- 0
- 帖子
- 1389
- 主题
- 937
- 精华
- 0
- 分享
- 0
- 好友
- 111
升级   0% TA的每日心情 | 开心 2026-9-17 16:51 |
|---|
签到天数: 265 天 [LV.8]以坛为家I
- 自我介绍
- 内蒙古大学计算机学院
 群组: 2013年数学建模国赛备 |
 - JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。
- 2 q$ G: ]% ~\\" r4 [
- * j$ J: k8 f+ K2 x\\" P1 E+ z
- 1、环境配置, N+ {9 q9 O7 t1 y2 E7 Z
- 1 P F! w7 P0 q( Q, M
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html; f) l$ E' U0 m% S. q
- 8 o$ P. U% A7 w
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- 9 g\\" ], o( w2 u' M
- ) {! K+ w6 b) V\\" ^ n. J
- (1)jxl.jar —— JExcelAPI 函数库;# P: Y* `' T. E3 R: P% l
- + q0 C. L; S\\" N3 x9 Z* r
- (2)docs —— 帮助文档;. r; c6 w+ w2 ~7 t9 E
- 4 z+ @\\" |\\" m, r
- (3)src —— 源码文件夹;* ^1 h' Z* `* ^4 P- h$ I0 d
- - P# q* E& \, u& A; h9 m% |! d/ ?
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- 7 ?5 b: d\\" v% T5 d7 J
- 6 v3 P* z2 b. q; o2 T& D9 }% F
- 2、Excel基础操作实例
- \\" {0 \, t$ @- _: U) R, o
- ( g/ |/ i9 Q# e: R9 M! c; Q
- (1) 创建Excel文件
- 1 ^6 _2 o0 s# n9 p\\" s6 ~
- 2 R9 A) j0 S* z9 [8 D, L
- /**读取Excel文件的内容 - j! ^7 H( [2 x
- * @param file 待读取的文件 * I9 {0 Y! y5 `9 K
- * @return // 生成Excel的类 */
- 8 `( {' T) L d6 m8 M) p9 t
- package createxls;
- / P5 i+ q4 @5 c
- & t3 _# x- C\\" Q% q
- import java.io.File; % n* C6 U+ |; F: Z% S$ `; }
- ; S# u' k/ \9 Y% I$ {# r
- import jxl.Workbook;
- 2 S; u- Z' D( _' L5 E& X7 U
- import jxl.write.Label; 1 f& C4 E: z) M* c
- import jxl.write.WritableSheet;
- ! Q7 Z& @2 m0 s# l- C' ]
- import jxl.write.WritableWorkbook; 9 p0 r1 K8 n! y, E8 h! K; V
- 7 f) _, Y! @& H; E3 w, y' L
- public class CreateXLS {
- H3 B5 G W _* p
- public static void main(String args[]) {
- 6 v( w2 l; {! L\\" Z* f5 u
- try { 4 z# e1 q4 }$ D6 S7 g
- // 打开文件
- : Z& E( r2 F+ ?: N# y
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- . f2 d' }! o9 U# n7 l7 O$ e/ y6 E% i; u
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- 5 {# ]7 C9 |' j- B5 s# \
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- ! B) V o8 d3 S$ o7 F7 n
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
- 2 O3 W& L6 L9 x) `/ P3 I( o7 n/ R
- // 以及单元格内容为test 1 _' @6 [ v$ s( F+ \1 p
- Label label = new Label( 0 , 0 , " test " ); ! F3 M, x- W2 e) W# ^
-
- 2 G( T+ W: C9 N, z7 l) G; p
- // 将定义好的单元格添加到工作表中 # ^/ Y4 G3 I0 A0 g
- sheet.addCell(label); 9 ?8 U$ s% M X: A: i) _+ Q. |
- 3 I% N. z; f \5 y3 k& l
- // 写入数据并关闭文件
- 6 Z2 m2 f\\" i% K/ @( O
- book.write(); . W6 C& W: Q. h5 e( ]% p
- book.close(); \\" `8 n' e\\" Y7 w1 D6 T
- 2 [9 Q4 {2 p& d) o, C2 N( ]- q ]
- } catch (Exception e) {
- $ S7 _- k5 l$ P9 a/ d' H+ E
- System.out.println(e); 5 d1 V) r; v7 ]\\" \
- } ' f b- J9 s# B8 D
- }
- 5 v* j0 x9 s7 A7 s* V; Z1 E+ u
- }
- \\" z\\" }( j) y0 A; M$ B$ X1 }\\" J. }
- / _! l) {, K5 p\\" { N7 X
- : _\\" M& R \\\" L6 P/ _! J
- 7 T( `- V6 `+ X/ ]( b' `) s
- (2)读Excel文件\\" @- b( v6 z9 g' {* i& N
- $ E5 [1 H0 K# T
- 3 {% e Y5 y' z/ W3 D& ~; }+ Y\\" l
- package readxls;+ L6 b j\\" ~* @0 n& P) C5 d& p2 |& G
- - i6 G& |5 F$ W# H( a% n- a9 z% B. z
- //读取Excel的类 & U0 u2 \. ^\\" C
- import java.io.File; 5 O/ m! ~0 o& p
-
- 9 e' D1 z) T U1 W7 a/ T3 N
- import jxl.Cell;
- ! q1 m1 @; G8 o, [9 g\\" f
- import jxl.Sheet; . P8 p; x9 b+ F d, q
- import jxl.Workbook;
- 9 N4 N. p9 j8 g+ k3 b- P
-
- + g& d/ v# _9 I
- public class ReadXLS {
- ) H, ~7 K3 J\\" {7 k' a f
- public static void main(String args[]) {
- + ]1 h% n9 o) v ?/ z
- try { 7 c+ M( M; W# }8 w1 f/ N
- Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
- 7 O1 p$ \ H* Z7 x4 z& p, J
- // 获得第一个工作表对象
- $ y0 ?& Z# v' a, j; C7 v( ^* h
- Sheet sheet = book.getSheet( 0 );
- V1 T5 @& W) d( W0 K
- // 得到第一列第一行的单元格
- 3 b\\" Q2 W c: r0 o; S1 o% p\\" s
- Cell cell1 = sheet.getCell( 0 , 0 ); % g: {. w, Z8 v! x: d
- String result = cell1.getContents();
- $ O: J% o1 \\\" l6 H
- System.out.println(result); $ ?8 c+ F) v* S- c
- book.close();
- b2 `9 g1 J5 {( o
- } catch (Exception e) {
- ' k' X- f% a: ^- ]: o
- //System.out.println(e); 3 J9 g8 T' r& ]$ R& E
- e.printStackTrace();
- 2 u# {9 |- B* s# r
- } 7 p }. |; k/ j* o7 w( @7 O
- }
- ( F! y1 E0 p1 ?- Y- U0 F
- }
- 2 {& D( ~) V4 A$ o9 d0 k G5 P
- ! Z) z! \3 ~( R/ y7 L/ t5 r. o8 ~
- ) b( ]% K' g\\" _) Q& s
- . {6 u, R4 U9 h' e/ y% y
- : `( h- ]2 b, z; I; U5 r1 z
- (3)合并单元格、格式化单元格等5 b( ^: W( e8 B/ X
- - l3 @+ F8 V; u$ A/ P6 I6 @4 M
- 2 x9 H0 g5 V8 ~( l1 M4 M
- //合并单元格并在单元格中输入内容
- ' u2 u( l2 w, i6 b L/ i
- & M, n9 G/ d) E- Y
- package additionalproperty;
- 1 P+ i- p# X: F\\" T# e4 D; F
- ; k1 |( C8 ~: M* x: N* E
- import java.io.*;7 Y% D2 A) V1 h) O. i* x
- import jxl.write.*;* O5 d3 n+ X* {$ [: \7 Y: H
- import jxl.*;+ j\\" E* g4 m/ \# V* z# \; j
- # J: C) l0 U: _! i) H: f$ @! [
- public class MergeCells {& i5 m5 Y: O0 ] b2 F7 l
- public static void main(String [] args){1 B! x: V+ C/ y
- try{! D( N- W8 S1 ?( O, S$ B# e& O
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));0 T3 b, y: H8 B D7 m
- WritableSheet sheet = book.createSheet("第一页", 0);6 O% b+ _* A1 k4 \: F
- sheet.mergeCells(3, 3, 6, 6); //合并单元格6 h+ U! W4 d# H9 \, Y
- & s% O( q9 v8 N% d; |$ c g3 P- d: I
- //设置填充内容的格式- _! X9 v: @' s: v1 F
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
- 1 s5 R/ L X; i1 V' e9 U
- WritableCellFormat format = new WritableCellFormat(font);
- 1 R! [& b+ ~\\" u, Y& L8 o
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中2 I8 w* y, x0 c' i# x5 D
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
- ) Q! ~) O1 Y+ l w+ ?5 N5 i: k
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式4 a4 F* B) L: b) B, ]
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- ; J\\" q- o& _% ^! W
-
- 0 [- k, x: x, w _5 d4 b( ^! {
- Label label = new Label(3, 3, "合并", format); //添加内容
- ) O* |' J; h& A# s. L; E0 G
- sheet.addCell(label);
- ; p/ L\\" n- h- e+ F* j- C1 k! Z
- book.write();
- 3 B1 B* ~' Y, u9 d# a
- book.close();
- 4 r1 H8 s% U# X6 q# {4 A
- }//end try( l' R) M# k\\" @ d+ T
- catch (Exception e){% J) G# L0 j( | i, g0 q
- e.printStackTrace();, Z1 z! X4 d0 t7 k
- }
- % \* o, s' E. p) O\\" g2 i
- }, W: w3 i6 W N
- }; j @0 z/ v# k& n
- ' z1 e* t\\" B6 h/ a4 p- |/ P. x
-
- + X\\" p, M: }- L; F2 S' H
- 3 [9 U! ?/ J\\" y) X4 ]
- (4)添加图片
- 4 y* m+ g6 ]( [- x8 v
- 3 W! H' w! D5 i* @\\" P3 ]2 @
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。% d6 O& I* d, }3 I
- ( i8 r8 }5 A. q\\" y) ^' G
- + y, k1 A7 }/ _/ \* ~+ K
- //在工作表中添加图片1 L' u7 i5 g3 m: s1 n4 Q y
- % f6 w. i3 Q( g- u# u
- package handleimage;
- + o( e _, U, v\\" |8 H
- 2 h/ i% T9 b\\" _) r. N, R5 V
- import java.io.*;
- % U% n3 _7 x- W$ E# V3 M; X- x9 c* L
- import jxl.*;
- # h# H9 p5 G6 }4 U+ |0 C
- import jxl.write.*;
- + s4 q+ j+ x+ w8 L. j
- ; G) m3 f5 @/ M9 q2 G5 ~& d9 t+ }
- public class CreateImage {
- # c2 X/ _3 L- X E8 A
- public static void main(String [] args){
- # D% e: |$ x1 ?9 N) ]8 s) h1 S8 p; c
- try{
- u: H! R* K2 R3 | n: C: |
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));6 g: b) x3 N+ c1 @8 E8 M' Q6 [
- WritableSheet sheet = book.createSheet("第一页", 0);
- 4 e% d% }8 L- z, H
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
- 3 Z& K9 F- r9 C. C2 F% Z' n
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));/ x& y3 h* o$ M. N% B) q7 f
- sheet.addImage(image); //添加图片
- , R; A2 D/ [. E- T; _& u6 b
- 3 A* q& R' d. d/ M8 _5 j5 x
- book.write();
- . O' s0 Q, C% r( e5 ~
- book.close();
- + P3 o) N) G/ B% Y5 m
- }//end try
- 8 F' c. W6 Y* m J
- catch (Exception e){ e.printStackTrace(); }
- $ Z3 v+ Y5 e/ n# h7 {3 ^0 c: D
- }
- - G) O: I. ]( E: H: E! Y( H7 D
- }
- a4 B; Z0 F4 a; E9 {% L, |9 K
|
zan
|