- 在线时间
- 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的使用方法。
- & i\\" O: a5 ^4 {9 U
- 3 \8 x J R\\" l$ m0 x
- 1、环境配置
- $ ]: O5 M6 h' \
- - _/ l; J* c\\" R
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html\\" e; t) ?! R6 T) r) b' I
- : [! E- f) U+ l
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- / T1 [# m# E* y! O\\" {
- 2 Z( `. H) m! |0 i1 q/ G
- (1)jxl.jar —— JExcelAPI 函数库;
- 1 M8 k& i6 F& s3 B
- # z. z+ f1 N\\" n
- (2)docs —— 帮助文档;
- ! I& N: p: L: A: s+ u, E1 S! V' k
- 3 S5 k$ D, x0 N! W1 A3 i\\" V
- (3)src —— 源码文件夹;
- ; u4 P1 n( _: Q. _
- X5 k. [+ |# o# S
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- , L; ^\\" ^$ s3 P* b7 o8 \
- * F& i4 V% f- ]- Q
- 2、Excel基础操作实例
- 7 E3 d% y2 l' s% D2 l$ }- n$ I
- . b+ q: j% ]- X& x
- (1) 创建Excel文件
- ! x* n4 n, K0 E* A2 f0 b
- * Y5 X3 Z- ]5 Z* k\\" z! j- @
- /**读取Excel文件的内容
- 8 X\\" ?4 P* U; k4 }
- * @param file 待读取的文件 ( ^; t+ ? C0 u; a$ X
- * @return // 生成Excel的类 */
- % Y) X) r* {) J6 t! |
- package createxls;
- . j3 u! i9 o5 j# O8 p. J
- ' e2 Q7 B. c. \& S9 ~
- import java.io.File; ' h9 J# k: W0 }3 E7 s- g6 s+ a/ B
-
- / W/ ?. d+ L/ b+ G$ Y0 c( @
- import jxl.Workbook;
- ( P. G% }: K\\" i, q
- import jxl.write.Label; & a; T1 E- y$ }* ~
- import jxl.write.WritableSheet;
- , T( i7 D/ S\\" E1 }, z
- import jxl.write.WritableWorkbook; 2 r5 N) k* P\\" E. \9 z9 B& N8 R2 {$ P- G
- % S4 {, U% ]3 a
- public class CreateXLS {
- 9 Y7 v6 e+ |. ~+ h7 k8 ?2 j
- public static void main(String args[]) { ' o7 o5 [% v* Q/ ?0 h4 b- F3 O
- try { , g3 W$ P. S, `! I0 i4 P/ `
- // 打开文件 7 h1 ^+ }- |) C6 |
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- , f1 k6 A6 p: c) v7 z
- // 生成名为“第一页”的工作表,参数0表示这是第一页 ! j# ?* v- N\\" L, N8 K. p/ y
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); 3 C, ^. w6 g) A5 c& O9 h* q9 z7 d
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
- ! r: Z. W8 j4 S$ l3 d
- // 以及单元格内容为test
- 0 {1 s! L; K- V- f
- Label label = new Label( 0 , 0 , " test " ); 2 x& c4 s\\" U+ c9 B# I; }% A
-
- - W; l; e. X2 M& U# p( o2 v7 @
- // 将定义好的单元格添加到工作表中
- 9 P8 p& a- C! U0 N- B I' l) k
- sheet.addCell(label); 6 w3 y- s7 p3 u
-
- . D/ p; k& g\\" p! d* }/ r
- // 写入数据并关闭文件
- 9 r9 [( u0 ]9 H- n9 z5 ^
- book.write();
- 4 N# ~. K, R7 |9 H m! g* M; k
- book.close(); ; P( q, }9 P8 {% m4 `3 Q0 T3 v; D
-
- 5 Y0 H) R+ y( S/ W+ j' F
- } catch (Exception e) { ) T+ L& l; ]$ l4 ^. O2 D/ _9 X; q
- System.out.println(e);
- ) K( I2 y- F% ^! F, K( w+ v$ n c
- }
- 2 s: w( ~1 _: }7 x( k\\" l
- } 3 Z5 U) P5 A* a. N. d3 O
- } & y' n6 c7 B, N( [. L* R$ L7 l
- : B, u. `$ B/ G
- l/ L+ C' o7 U
- % _7 T/ }. B& V3 ~7 k: N
- (2)读Excel文件5 k9 O& @& i! T
- ) A! ]8 s4 b; ?
- ! g- a5 n6 Q0 j* u9 a$ s& X
- package readxls;
- # m5 n% z6 V6 [
- 5 |8 `\\" P8 c) p! g
- //读取Excel的类 ! z f5 B* P9 p3 K0 f
- import java.io.File;
- : ~0 V! P* N2 w9 B, X' r( T
-
- ( }! l2 p6 @& H
- import jxl.Cell;
- & g9 u% ^9 O7 i& m! w\\" R) } A
- import jxl.Sheet;
- $ J! W# {, k) K4 l( y @6 h
- import jxl.Workbook; 2 V: e% Q) z$ Y5 x3 C: Y$ J5 _
-
- / X) L5 |$ [6 A6 Q
- public class ReadXLS { 0 G8 ~- ^\\" O7 e1 n2 |
- public static void main(String args[]) {
- - v* c. [6 e! p4 V+ T
- try { 5 W! n: O9 y& q3 D! Q! `
- Workbook book = Workbook.getWorkbook( new File( " test.xls " )); # y, N. h5 @8 z9 y3 u
- // 获得第一个工作表对象
- 9 s/ b( Y, G& B& @$ g/ F) o0 U
- Sheet sheet = book.getSheet( 0 ); + \. e: `% S0 Y5 p4 F9 o
- // 得到第一列第一行的单元格
- 1 A* i p, \4 q
- Cell cell1 = sheet.getCell( 0 , 0 );
- \\" W6 \9 T- t* X% W
- String result = cell1.getContents(); ( q4 v$ `1 y' \2 f3 Y& h6 _
- System.out.println(result); f. K3 _) {8 X
- book.close(); : e1 y7 \ `8 k- |, X7 F\\" @
- } catch (Exception e) { , P- u& Z6 d3 h! f- v
- //System.out.println(e); 3 W/ h+ \! \% Z* W. q/ t2 s6 W
- e.printStackTrace();
- ! |8 ?& o# N8 A* S8 S
- } * V) b. A8 s d7 q
- } ) h% d' [) ]0 ]. c- F9 z
- }) y% k8 k. p+ y8 V! G! u
- - e5 C! U. A4 }
- 7 V9 k! ?2 ?7 m7 |: o
-
- 6 C. ~* i+ Y' Q/ M
- # ]$ B. E, I. G' E\\" B1 T
- (3)合并单元格、格式化单元格等% W$ H9 Y7 c- g7 B1 u, H. l. b8 h
- ; I) V; _' B4 C8 N& v6 [
- % E: m& o6 W7 v% }. W
- //合并单元格并在单元格中输入内容3 ~3 t1 }* w4 U0 X6 o) _7 C
- ' y+ N/ n8 T: d- e6 A
- package additionalproperty;8 _0 \$ z; l+ L2 n% U5 }
- + X! C* |! c# i# z* @
- import java.io.*;3 j. V& n9 e! ?$ K1 F. W/ W
- import jxl.write.*;2 I! f2 z2 ^4 Q. m
- import jxl.*;
- - X% o$ p8 a1 t0 x1 O5 S
- : {# R5 ?( s5 H. U, u. ~
- public class MergeCells {3 i$ \' }' v f: \- V% B
- public static void main(String [] args){
- 0 q, r1 y, D) `, X! o# W2 B* E4 K
- try{4 @, m7 Y8 [6 ~# @3 S q
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));) O. S/ f/ P5 r4 h) Z8 H' o
- WritableSheet sheet = book.createSheet("第一页", 0);6 c& [9 r' u9 V% D\\" I! A% K
- sheet.mergeCells(3, 3, 6, 6); //合并单元格' K, x* C\\" W% t) Q
- % Y$ U$ q4 T: S, U7 R t2 C- C) j I8 u
- //设置填充内容的格式
- + V2 M2 ~0 Q! q' ^
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);8 R7 J+ P3 D/ S! }0 s
- WritableCellFormat format = new WritableCellFormat(font);; d$ a% Q5 \2 h! d' d
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中% g9 J8 L! r! _1 f
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
- 0 w6 H, D- _0 R/ V; {/ B
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式 E8 l7 n y' O! ]0 \7 t0 x9 b
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- # R: t% H- n% E0 O* S+ J' L9 d4 u\\" W q
- 5 d$ W( l4 Q( r4 z% D
- Label label = new Label(3, 3, "合并", format); //添加内容' ^- j; l* w! ^
- sheet.addCell(label);
- 3 k6 M) r; _4 b8 S( J4 B! Y
- book.write();' Y# s# e% C; w2 Y% e
- book.close();
- [( [* S4 T\\" i
- }//end try
- # G+ O' U/ ~( p/ t+ U: I( M: y
- catch (Exception e){
- - U9 s- P' I( H, R1 W) U
- e.printStackTrace();% y) A) |' P+ ]
- } a\\" ?/ N( R: d, ^0 `
- }
- 9 w( t5 N/ W/ U) a. Q- C
- }
- # a0 E- L5 }. d' v
- . e U( E7 ^& o2 n* k( }$ l
- 4 A: T/ o, J3 N3 Z A
- + ?7 r+ m2 q1 E
- (4)添加图片
- 5 s! {9 w; b9 Z% _. l! Q4 B9 O% k4 Y
- L5 L0 m* d- D\\" y/ A1 n; n- Q
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- ( `. r3 i X0 w6 i) T* l/ C& o2 f
- + F$ \: q( e9 P
- 8 C\\" e0 {' l' ?. B' R+ [4 y
- //在工作表中添加图片0 `\\" `$ V$ y' q! H. q) _0 c7 Y
- , I! J& o\\" x\\" ?1 ^
- package handleimage;+ N- j/ c/ Y+ d1 }1 \
- 4 `\\" N4 V x$ [4 _
- import java.io.*;
- % t U; {5 c5 n# w9 i% Y
- import jxl.*;
- 7 c* C$ }$ K$ x) K i
- import jxl.write.*;% f0 s$ \' i x& p8 v
- ' }0 ]\\" t9 D- @5 f, q1 g6 ?0 J) v
- public class CreateImage {
- 1 O6 C' c4 ?6 h& w+ W
- public static void main(String [] args){
- 1 I5 ~3 M5 ?: H) I& I+ C
- try{9 q* F% O$ s. V
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- ; [5 f4 Y; g& q( M
- WritableSheet sheet = book.createSheet("第一页", 0);2 V& W _# x5 a) p5 j: R8 k
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
- - ? E& X' C: h# {9 B3 w( [
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- ; K* C& Z0 Z% M& I8 M4 t4 G
- sheet.addImage(image); //添加图片 y: Z, r( p# Y( ?$ y7 _- k\\" }/ ~1 Q
-
- ' U$ N# O1 u; `9 e
- book.write();
- m( n' S2 F7 P* X( k2 Q3 U! A% c6 ]* J
- book.close();( b4 V: i\\" d) C2 }5 a& I; t3 _
- }//end try
- \\" N) X' |& S) s
- catch (Exception e){ e.printStackTrace(); }2 d. t8 s# n+ L
- }\\" m0 k\\" l3 `/ G* c9 T/ V6 s& L
- }
- # p+ ~3 \# p' @4 p' Y
|
zan
|