- 在线时间
- 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的使用方法。/ N( _2 R* z2 Y. H( v: I3 A* M- u. J
- , ] d. P9 y. D8 V3 c0 J% c0 O
- 1、环境配置1 s6 d; m9 }9 l& |' f0 N$ Z, {
- 6 x6 L: W& w\\" i* G
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- # r7 @: e- g( I# f- ]2 C6 t
- ! D$ k- {3 p y# e1 J( W
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- 5 ~- J- R; q1 o; r) Z
- n. q8 S5 a# r/ w+ e
- (1)jxl.jar —— JExcelAPI 函数库;
- - }+ f) H! k- k# ]5 J7 t, \
- . ~& K: p1 u& p. s8 d5 W( M1 |' z
- (2)docs —— 帮助文档;
- & M: J& W/ A! A: w, i# j; S
- ) f8 E# p' P, K# l- T
- (3)src —— 源码文件夹;
- ! @: o+ `: P, r' Y$ z8 A\\" u
- 0 l( d: L( _& d3 \. h! q
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。1 w; V% O! @, m3 n7 F2 k9 ~* ~3 \4 Y
- ( z) Z7 N# p$ s. r9 E& k
- 2、Excel基础操作实例
- ' U [+ [1 j+ Z- r8 ]% I+ Y9 W\\" `/ ?
- - I/ o) h& @: \9 ^/ J n5 P
- (1) 创建Excel文件
- # a! B1 C6 Q1 t
- - i# X) ?( E3 E$ _
- /**读取Excel文件的内容
- 1 ?7 j: M: m, \! G4 v0 r: n
- * @param file 待读取的文件 8 L4 j# Y! \7 [. N
- * @return // 生成Excel的类 */
- + C* U) [ K/ ?. T
- package createxls;
- 0 _\\" [\\" L8 v* j\\" p( w
- 1 [& a; B7 V6 u D1 w/ B) I
- import java.io.File;
- \\" l: d+ W# d( {! f1 R
-
- ; z8 [+ c: c) m
- import jxl.Workbook; ( ~! O O' N0 ]
- import jxl.write.Label;
- \\" X$ a. r* J( E: d$ t5 g( r
- import jxl.write.WritableSheet;
- \\" @) |7 U3 r' D& [, t* u0 B) E
- import jxl.write.WritableWorkbook;
- + F+ P, L- c' d
- $ Z5 V# v, L, N, g' C* j
- public class CreateXLS { 3 b7 d _8 b% a( X\\" y
- public static void main(String args[]) {
- 1 I7 n\\" N9 w1 t- Y
- try { ! k3 P4 _' C* \2 a' X
- // 打开文件 & z; X* h& I( K4 w% ~: B
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- ! o; G. o- ^3 y. \
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- 7 i5 D( `5 V2 v\\" o% B# z: v& M
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); \\" ?0 V# O) K% ]' h) M7 ?
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
- / S* s, H' ]* S! M4 X
- // 以及单元格内容为test ' }8 h3 p; A& ~; t3 ]# u/ K* T
- Label label = new Label( 0 , 0 , " test " ); ; L% R) l W: z5 R; g+ M
-
- - @, B( ]\\" m3 n4 {1 I
- // 将定义好的单元格添加到工作表中 ; d0 e7 \4 Q9 t
- sheet.addCell(label);
- ( ^0 P% Y; c4 v d5 m& X% T6 o( F
- ; ~4 U0 j* a! Q* q6 F& }3 l
- // 写入数据并关闭文件
- * W6 H) X; d1 s2 ]% Y- Y0 u7 W# {
- book.write(); 1 C j5 _( S! k$ X' o/ ^- i
- book.close(); 0 u4 l- w' C) h* b
-
- 7 `& Q, D7 S! u7 R L
- } catch (Exception e) { 5 ^7 G* z7 m+ Q9 e9 O- |
- System.out.println(e);
- 0 e0 N3 P8 T- z- A9 h7 q
- } 5 F, ^4 q% L2 K
- } % U\\" T* i% f. t( r
- }
- 2 h\\" c t- H2 t\\" @
- . z8 N% U/ @% f& Z. Z9 G: I8 B
-
- 5 c1 }) c. U) d4 w! @- g
- ( o. W9 r: S% B' a2 j) p9 ~
- (2)读Excel文件# e( [/ S! l. ~( P5 S
- ) d# m7 b7 G S1 P e
- , ]( f. v8 T- A) H* p
- package readxls;
- * m, w; w* ?3 O/ E8 I8 L
- ! _3 S/ l/ A, L\\" J6 V6 a, j
- //读取Excel的类 : p* n4 _( o$ K: S
- import java.io.File; E0 Y, W5 m. z3 Y( o\\" p
- , y\\" n9 m* ?( Y, m) `. u
- import jxl.Cell; : ]* A# f4 n\\" b\\" J4 o9 N- ^
- import jxl.Sheet;
- # d5 b$ M) D1 z: E
- import jxl.Workbook; 0 e3 R$ ]7 ~4 h. C) \
- 7 h G9 m6 J, e7 k. X
- public class ReadXLS { - A+ H i1 o$ k6 a. T( E$ c
- public static void main(String args[]) { 7 M8 V5 O+ }$ X9 {% e; z
- try {
- 8 h8 d* ?. P4 I6 w% h
- Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
- 1 z, ]8 Y+ E6 M: w+ S* B& S
- // 获得第一个工作表对象
- & ?& \( A$ \4 q/ E; {
- Sheet sheet = book.getSheet( 0 );
- - ]: E' s8 y. B' J
- // 得到第一列第一行的单元格
- ( R0 M2 Q\\" `4 ^; ?' a
- Cell cell1 = sheet.getCell( 0 , 0 );
- , i* {' Y+ i# R- d! Y, i, f4 a
- String result = cell1.getContents();
- 5 R& U3 \8 S) j, G* U
- System.out.println(result); * K; q/ {/ h7 D2 g& H9 ?$ O: V& P
- book.close();
- 6 B\\" U, W$ T; `
- } catch (Exception e) {
- 8 @$ L) L& }8 r+ P7 t8 k
- //System.out.println(e);
- ( d! P4 K2 m, e( p
- e.printStackTrace();3 N0 v$ T) E- h, G\\" o+ q( q
- }
- ( d7 X# R6 N% @3 |! `
- } $ I! f6 z7 I% f) F+ W
- }
- / p; y! L- a% n7 E: V
- - K3 F1 K# X- ^% u9 A
- : f: D* z% k+ `* V u% {
-
- + m9 I# Z4 q0 B
- % \$ ^1 p: w a* B( {
- (3)合并单元格、格式化单元格等
- 7 @* x6 d! o\\" e- q5 Y
- 7 g! ]0 b3 ]1 k& F! P
- 1 h( J$ k% k- K
- //合并单元格并在单元格中输入内容1 W% `* L7 E7 R' U
- \\" {* ~9 S3 f! e9 [\\" }
- package additionalproperty;1 e- {% `% E( {/ l) O
- \\" m' g1 N1 Z( }5 I\\" ?7 G3 A
- import java.io.*;5 l F8 k1 N\\" j
- import jxl.write.*;- V9 ^ G/ W5 [* G' b0 ?
- import jxl.*;
- 9 q6 N2 X1 j+ p4 Y9 |# b8 t6 T
- + |3 j; H# |: b) q
- public class MergeCells {6 j8 D$ L0 a4 k\\" G8 U
- public static void main(String [] args){$ E/ J4 q; c& p/ Z
- try{
- . u1 N/ p5 f- B1 e8 U/ I7 B% A8 i7 \
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));6 b- M) o; B\\" E* o3 C) J
- WritableSheet sheet = book.createSheet("第一页", 0);
- $ n2 C& Y) T3 O
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- 1 `. g) \: Q: f0 p
- $ T( E4 m4 B- y; E v
- //设置填充内容的格式
- 0 g5 v4 }' O! ?1 J2 z
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);5 C. T5 R8 D$ S( _. {* j/ P2 v
- WritableCellFormat format = new WritableCellFormat(font);; n0 e\\" G/ k0 t7 V8 c
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中, B2 b7 Y\\" I/ P1 a
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
- 2 u5 _' R5 ^\\" p! U
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式, F: c8 {1 @5 k+ o
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- . o6 |# N% b9 _% h
-
- 8 o# G u) _- \
- Label label = new Label(3, 3, "合并", format); //添加内容+ Z+ V1 {* v' E% J$ K
- sheet.addCell(label);# ~4 u. l& |9 x2 u$ t3 A% }
- book.write();6 N9 ?! w! a+ R. u
- book.close();! U8 y0 O) R2 y2 c% @. W6 T9 m& p/ n
- }//end try
- 3 E5 M: P4 b% }/ s: A, |8 Y- s
- catch (Exception e){: w3 u+ L# m& E% M
- e.printStackTrace();! ]6 z+ ^+ m. F: Y
- }/ @& X: V6 |. r# m/ Q; l, l
- }$ X) B( @1 R( h\\" A
- }
- / B {\\" z6 ?8 u
- ( I9 V6 A6 w0 A6 J) \) X
-
- 6 H I( ]6 _; H: Q) {
- * k4 O- c& ^/ K7 k# I9 ~
- (4)添加图片
- 3 t* P( C+ ~; b4 S4 Z
- & k3 F7 z+ h+ Y
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- + J: h ~\\" @. c6 r& I) j% b\\" Y
- / c3 }, Y7 I7 V9 _- f; N; U7 C' V
- 2 P7 p( b* w, {9 P\\" I0 j9 V
- //在工作表中添加图片
- }$ ^* R( |8 x9 `7 D( T
- 2 i8 t ?/ c! F7 u\\" P+ K C8 O
- package handleimage;5 U1 N4 p! V3 C, Q/ \: K5 F/ j8 W
- * F, K! k8 J; x( R3 n2 G
- import java.io.*;
- ' c! t\\" J. p/ @
- import jxl.*;
- ' A$ E* a6 n4 O
- import jxl.write.*;1 u8 T& w: C( F3 |6 d- k, l
- * ^' a5 R8 R: c5 N4 k ]
- public class CreateImage {
- + o. y' Z: `. O0 ^0 g: y
- public static void main(String [] args){7 ^, n$ i) |3 Z2 q
- try{
- ( C) S+ D\\" @4 {7 I: h
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- 9 Y) Q; B0 M: h+ t8 Q' F `3 G
- WritableSheet sheet = book.createSheet("第一页", 0);3 E\\" M, K0 W+ h- B8 U( s: y1 u6 M+ V
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式7 E0 Z V7 c! g% f3 {3 |) @& H
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));5 N( u9 t1 U9 f
- sheet.addImage(image); //添加图片) I7 F( _2 [0 ^% D z
- 0 {- }6 @3 Y h/ j4 Y# H
- book.write();% Q [ l5 A( G2 s
- book.close();
- 2 `6 N. |2 w9 X ]0 x d7 R Y
- }//end try
- 0 x4 V$ B+ ~) k
- catch (Exception e){ e.printStackTrace(); }
- ) v* Q1 t2 f; f0 g. q2 S
- }
- / q+ ?! _2 P6 P0 ^# m& y
- }' C; j$ E: P+ g\\" b5 B1 Y
|
zan
|