- 在线时间
- 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的使用方法。
- ! p5 _. k6 E! N7 W M& }+ F, t
- ) G& H+ W( a2 W7 }7 M
- 1、环境配置
- 8 }8 L# o; ^! b% x: B+ v! A8 z& O
- 2 N, v! N$ B# ?( ^2 _\\" K5 d
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- ; O( ?0 v2 h- Z8 H( F
- + M+ i7 P- }' ?8 Y2 C5 F
- 下载完成的包解压之后,可以得到如下几个重要的文件:+ K Y. l/ t& r( u6 r( p
- 7 K0 t$ q& W. I4 E
- (1)jxl.jar —— JExcelAPI 函数库;9 u2 W- d1 [0 O2 E5 D\\" G
- : I7 p# _: U! G2 C
- (2)docs —— 帮助文档;6 r- J! {: U- N
- 9 J& W4 h6 R$ [& y
- (3)src —— 源码文件夹;( C; N& Q$ e3 y( u5 Q! ]/ u
- + P' |. e7 _4 `+ p
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。8 x7 m6 \- {; g% K- ^+ T* ~) `, a
- \\" ]9 _2 O1 z) g9 E
- 2、Excel基础操作实例
- . P8 y; I( l3 \9 |/ n- a6 j
- ( ?; ^\\" q2 d; @1 e- x) Q
- (1) 创建Excel文件
- ! g+ d4 d/ ]+ a% T# f- z% Q
- # x( l* j! X2 `2 u* g5 c
- /**读取Excel文件的内容
- & D {; R: r1 T
- * @param file 待读取的文件
- 1 q7 n1 N3 A; R9 n3 r6 S
- * @return // 生成Excel的类 */
- ; m; |% B& L, K6 W
- package createxls;6 }; e1 D$ N+ r# s5 ~
- $ h6 I& S! a e; f( ^- h3 V
- import java.io.File;
- 9 G, D ^! i- w/ k4 L- f
-
- 9 y9 g( _- |1 l, w\\" u, A7 L, G l
- import jxl.Workbook;
- 1 l9 l( c6 e8 M
- import jxl.write.Label; ! A/ u2 a6 H: V
- import jxl.write.WritableSheet;
- + U2 _\\" J. w9 r1 V$ M* K- s
- import jxl.write.WritableWorkbook;
- + l; c4 x( C% U- S! I& a
- 7 _; q1 \+ t0 X0 F
- public class CreateXLS { : ?$ U! y$ Q3 V8 n' x5 q9 Z, O\\" O3 Y
- public static void main(String args[]) {
- 0 C4 ^5 E\\" f0 c\\" h( v
- try { 2 C\\" T5 v5 B1 a% e1 V9 Z( ]
- // 打开文件 0 V6 I- i9 I% j/ e, ^
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- 3 Q( D8 u M- f
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- 5 D! l1 u; a- M
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- d2 e; I# s3 a$ L, ^
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) ( ]1 |* i9 I- \* u* |# z+ C
- // 以及单元格内容为test
- ( a/ W) Q8 H9 Y! k, l$ w8 l
- Label label = new Label( 0 , 0 , " test " ); ) w% q2 b* R* p\\" ?/ C/ [
-
- & z, X* K: e9 N2 Q: a' [
- // 将定义好的单元格添加到工作表中
- ' n% L9 t+ y3 g0 W: w
- sheet.addCell(label);
- 8 v; [& ]; _, N) [4 o
- ! J6 h' _: _9 y) ~8 j/ ~9 ]5 ~
- // 写入数据并关闭文件 1 B\\" g% ]* M/ N8 R- A\\" R
- book.write();
- , N1 A3 b8 e+ a6 e7 ?2 P3 U% c
- book.close();
- ' c* e8 i W+ I: [6 @ ~
-
- : b3 a e0 g; J
- } catch (Exception e) { 7 J% S( s: G' q3 R
- System.out.println(e);
- 9 K8 ~/ \( V; q3 \
- } 2 a! Z: p/ ^# h& d {' q1 W8 y
- } ' m% a; q1 N& i- ]* D7 O1 Z
- }
- + W$ p, W: q5 N) z* I8 t* O
- - t. s9 _6 f$ d- ^1 H& Z
-
- 5 h) C+ s8 C/ c% [! ?; ]
- 3 z! b) E9 c. A/ v* T# \
- (2)读Excel文件6 K. l: ^8 n4 J8 x$ y
- 9 R, ~! s\\" M) H- l3 b) E
- 5 [% W- d0 W0 o3 G* d9 B7 ? {6 W5 f' G
- package readxls;
- * k7 G; d7 z0 P% x
- , j6 f9 D( d- b* e1 m6 s
- //读取Excel的类
- / c2 ?/ }( _; Y0 \8 f' @
- import java.io.File;
- \\" i H% ]7 C: v7 Y6 @! H3 b
- 9 i1 \2 o6 t\\" ^) [/ {8 v
- import jxl.Cell;
- + V( G/ c$ p! O
- import jxl.Sheet; # _6 r% ^8 V' f( E
- import jxl.Workbook; + \2 [\\" R$ X+ H0 F1 a% O
- / }5 P% q9 G! e, i+ c8 C! s; d\\" U
- public class ReadXLS { 5 A7 E6 N6 @' |6 k( Z4 ?
- public static void main(String args[]) { \\" y' A6 G3 ~2 `7 E9 |
- try { 4 ]# y2 ^9 U! J' g
- Workbook book = Workbook.getWorkbook( new File( " test.xls " )); # X5 b- n- n\\" }' w6 F0 ]9 @
- // 获得第一个工作表对象
- $ X. v3 W\\" Z. g; o( Y
- Sheet sheet = book.getSheet( 0 ); ' \' s% ^: |3 t7 L# I
- // 得到第一列第一行的单元格
- & Q0 M' s' R8 }' G9 A6 y
- Cell cell1 = sheet.getCell( 0 , 0 ); - ~, Z- D3 ~. L# p7 y$ D- ~$ `
- String result = cell1.getContents(); $ h: j\\" H' I- e. _9 ?5 H+ J
- System.out.println(result); & f. e- w; ?9 c) }9 F
- book.close(); % \# z* Y w6 l& ?0 ^9 A. g
- } catch (Exception e) {
- 0 @5 ^' J* I/ H6 ]7 k1 @
- //System.out.println(e); 9 |) ~- `9 C# m& v0 S
- e.printStackTrace();
- & m) u6 q$ Z& C% B6 ~4 q
- } 2 z4 [' b' T9 K
- }
- 3 V0 U6 T* i/ a8 n7 d6 H8 S
- }# a\\" S+ p3 u2 ~. G- y5 d B
- & f2 E/ U\\" ` v2 h }/ }
- 8 G8 }+ m, o7 n. {/ V% @, |
-
- \\" i: `\\" x* h- z/ C c& k. g\\" v
- 0 K* o+ `. A! }: y- S6 M4 c* ]- m
- (3)合并单元格、格式化单元格等
- - I/ p$ U$ ]\\" g) K! d. h0 {
- % G' Q6 E, i( C0 T* a2 ?9 V& Q, l, Q5 r
- 6 ^0 @' b2 K4 w
- //合并单元格并在单元格中输入内容
- - G8 h$ q: l2 q
- ( s. a\\" K# j l( j1 R
- package additionalproperty;! c' _$ D4 i8 n9 z$ X M! F
- ) a! ]) y6 k: X/ r* d, ~& _
- import java.io.*;4 R3 e1 y$ Y4 T\\" b
- import jxl.write.*;( p9 @\\" v$ z% g M\\" z
- import jxl.*;3 U\\" N$ D8 x# W& W; g
- 3 ~# C; V! a% i3 S6 }
- public class MergeCells { D+ z1 o+ w8 R, L
- public static void main(String [] args){
- : n\\" j% D' x* b' \8 i) v
- try{
- 8 w* W$ ]\\" B2 o- s/ h\\" a7 C
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- . B2 z8 e% ~% m& q6 h
- WritableSheet sheet = book.createSheet("第一页", 0);
- % k6 P% D: V6 ]! G6 d7 a; R3 C5 U, ~
- sheet.mergeCells(3, 3, 6, 6); //合并单元格9 T' ^3 t/ f/ t/ R0 G+ Y
- 9 o7 P# y$ _1 l1 \2 S# {
- //设置填充内容的格式% x$ m! _& E$ g5 [, ^+ g
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);4 u% l* o9 u7 O% x- S; S
- WritableCellFormat format = new WritableCellFormat(font);2 b- |% R- R) ~% G2 J
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
- * K\\" j2 Q# v. V/ C4 G
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中* K3 v% m3 D3 B1 ]
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式$ k0 B% ` B) a; |
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- ' x* _. p6 f1 i4 z. E
-
- 7 L! N5 Z1 |5 g' ?5 M$ }* E
- Label label = new Label(3, 3, "合并", format); //添加内容/ `2 S1 ~\\" c0 r3 ?* l8 g5 H' H
- sheet.addCell(label);+ v0 G, I* H+ M
- book.write(); z* a4 o; ^! B8 g# V
- book.close();
- 9 U8 n: v8 j9 s) j; O
- }//end try. t4 J$ q0 K# Q0 u
- catch (Exception e){9 z- X7 J3 A1 h4 R0 _/ ^' k [
- e.printStackTrace();
- , K2 c+ x$ H: i+ z2 {2 G
- }% e* ]1 I# l8 Z
- }% T3 a) X( A* E1 W. a\\" M+ f+ i
- }
- / f0 u/ F\\" T) [: b9 W* J* [7 |' r9 f
- v5 N1 V7 s q3 B+ j3 h
-
- ! h8 e! D: y4 Q! W
- 7 Y$ u6 q4 }4 C2 I1 d
- (4)添加图片
- 8 y2 n* M0 _, e8 y0 p0 M, F
- 1 l) R+ t: k Q. s8 |: Q( A
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。/ h\\" u, O( e( u
- ! Z0 x3 z4 i3 M9 _2 E' a h
- 0 p6 s& Z4 ^/ m! {7 ]
- //在工作表中添加图片: X+ b- G* W7 x/ @) O
- 3 R9 ?1 o, @ X6 O
- package handleimage;0 }8 D0 _( Z- O8 D$ M! n7 ~- S) @5 e
- - Y8 [5 z6 e. }\\" j) _; {3 M
- import java.io.*;. z% s7 I9 K$ E4 R! D3 J
- import jxl.*;$ A1 |\\" B' \9 f
- import jxl.write.*;' I6 H' V4 E: E; M( X$ z. b
- ' m' [6 j% ^' X6 |9 k6 Z) a4 p
- public class CreateImage {
- * n) Z7 p- m4 C6 |, n8 H
- public static void main(String [] args){
- % n; f9 G. ] D& k8 |8 D
- try{
- 9 |/ Y+ B p' W/ G, `( W+ I8 v* N4 `
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- ! Q' b( K, v; e; O' z! K' c$ y9 J
- WritableSheet sheet = book.createSheet("第一页", 0);
- 0 K K: l6 S5 b* f
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式7 Q6 _$ ]9 `- k- G2 p\\" ]
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- 9 s( v1 ~' F$ o& V6 Z
- sheet.addImage(image); //添加图片. |! l. I4 [5 t, z0 M: w! S) `. e8 C
- ; X R. _5 p: G0 q b+ x9 W
- book.write();2 o/ R. h8 S' a3 T: W. }
- book.close();
- \\" J4 L. h/ d) q7 w. g C. ?) C
- }//end try3 K$ w S8 J/ k7 `9 _) H1 ?
- catch (Exception e){ e.printStackTrace(); }6 A. t) I. z$ ?
- }
- 5 |2 o6 _ z6 n\\" v2 F9 p
- }0 X Z8 ~( e$ Q
|
zan
|