- 在线时间
- 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的使用方法。
- ; v& |4 j! r- I- G v0 n7 v( X
- 3 f, A0 T3 n8 c: ^; b: q
- 1、环境配置8 R, ^3 V! E9 @\\" C( B5 S
- 5 r4 }1 A# |\\" \# [& V. ]( r
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- $ O( W w2 v% S4 V( M
- 5 Y$ J) m: M) W) B5 {9 T/ l* ^
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- . N8 b5 u5 A3 Q/ y* [) h
- / ]\\" }( R- N\\" n% U\\" |8 f
- (1)jxl.jar —— JExcelAPI 函数库;; F1 X! _$ I# ~% \, h
- ; V# |9 w9 E) S6 E* J4 e+ E9 O
- (2)docs —— 帮助文档;% k5 b3 W. { S7 w7 \' [5 j+ h! J
- 4 E9 B* Z: { T
- (3)src —— 源码文件夹;
- 0 @0 @2 l* Z- ~7 v
- : e# o7 t4 u& @% g+ i
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。- R\\" \, i, t. c0 T# j! _8 J
- 8 [. ?) c: U2 K
- 2、Excel基础操作实例
- + f5 y4 W: A/ z6 e\\" z0 d: X
- h! ?5 r8 j( u4 x4 g# J! j+ w8 o
- (1) 创建Excel文件
- 7 a; Q4 _\\" X! e! E
- ) _' k6 `& ^$ s, ~, [
- /**读取Excel文件的内容 : ]9 W# s- f! \\\" ^( ?
- * @param file 待读取的文件
- ( W$ c& T: n* h: y
- * @return // 生成Excel的类 */' W9 W* y; M& u0 \1 y5 |
- package createxls;
- , W3 l% Z& @/ @ u
- 6 [, O7 {# h7 a+ @
- import java.io.File; & i/ Y! d: V, v7 F/ V
-
- 4 [2 }3 V% y7 E
- import jxl.Workbook; % ]# x: `9 a' d\\" h9 @+ K
- import jxl.write.Label; . r6 ^\\" h4 g) B' O. t
- import jxl.write.WritableSheet;
- ' T6 N; l, t4 |
- import jxl.write.WritableWorkbook;
- % `: S/ p6 v) u3 z0 A4 G. u
- 3 R* I$ Y% H: ^; @6 y% Q
- public class CreateXLS {
- $ |! C8 W2 o4 B/ }& U# v
- public static void main(String args[]) { / x9 D8 p+ _\\" e/ X4 i, K, C
- try {
- ( D0 S1 R7 Q, ]: N) p% o% @- W
- // 打开文件 ' e+ K- }6 r. X) y7 y7 U
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- % U# B9 o' q& G* g
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- . a/ I) y7 {( }
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); 1 i+ B( G% P( i0 p. ^' M9 C6 l+ O
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) ; F2 {& l/ g) C8 ]! c
- // 以及单元格内容为test
- # \: _& ]9 L- L0 p
- Label label = new Label( 0 , 0 , " test " ); 1 d* r- q9 N ?. |\\" X
-
- 7 B+ R. c' M3 E
- // 将定义好的单元格添加到工作表中 - b: ^! K$ t$ V3 C! O
- sheet.addCell(label); 4 T0 T1 K1 }4 M O7 Y
- ) f6 d2 j5 |, `5 g3 b8 u, a( _# M- V
- // 写入数据并关闭文件 ! b: R3 [3 _# l\\" p( D
- book.write(); 7 N* }7 d3 T9 K\\" m4 a$ c! X# w$ m2 m
- book.close();
- 1 \; k0 }, B9 I6 A
-
- # Y2 d0 c$ Y* q
- } catch (Exception e) {
- - F& ^\\" Z: P) e% Q
- System.out.println(e);
- * r) B- @! ]1 y+ O
- }
- & ~. {7 o\\" K5 A# U! C9 v$ E
- } * F% |6 F/ ]( ?3 ^$ ~$ v. z
- } & m( O6 c. ]' J; {' C. L/ C
- ; i3 _; _# R9 |
- 4 J/ }: `. M, z# n
- $ E# H* [; \0 L a; J
- (2)读Excel文件
- 8 Y% N& V! {5 D! @\\" b
- 3 \# @* ^4 `, }, U @
- 6 m# f( o3 g+ S) r# `; ^
- package readxls;- |: A5 ^6 V( W! @( C\\" l1 K$ C4 o; a8 k
- + k% v' ]7 X. s
- //读取Excel的类 ; ]/ ^! s9 D2 N3 K\\" Q
- import java.io.File; # v, z) e# S/ @. V- j
-
- $ X1 f1 Z1 m\\" C* P
- import jxl.Cell; / t, {( ~$ {% f) w {
- import jxl.Sheet;
- ; d: Y2 q9 Q4 n4 ]- Z
- import jxl.Workbook; 0 ~, Q2 N\\" A: T, `% e
-
- r; q$ ~8 {- e6 {/ F* W
- public class ReadXLS {
- \\" J6 f: l$ C\\" E' m: b\\" @\\" H
- public static void main(String args[]) { & f+ L) `+ L( E& h/ j# W6 q\\" V
- try { h$ o d3 \- [) N
- Workbook book = Workbook.getWorkbook( new File( " test.xls " )); # Q9 i) F, d0 p8 y, s# r0 ]2 N
- // 获得第一个工作表对象 6 q& ~. _) |$ @8 x8 c6 B! k; f( Z
- Sheet sheet = book.getSheet( 0 ); Q+ j6 B, P\\" M/ U1 Y4 e\\" B/ ~: o
- // 得到第一列第一行的单元格
- \\" [; Y7 B) S' O; b; D% v
- Cell cell1 = sheet.getCell( 0 , 0 ); 5 H; U( W1 Z5 j1 N A
- String result = cell1.getContents(); # K3 C5 @8 R$ ~1 c6 V# ^
- System.out.println(result); / L/ N9 N( ~$ V1 Z+ f8 w4 N
- book.close();
- & N: f$ k, p H1 { D
- } catch (Exception e) {
- ' N/ l2 l7 v2 a# h) i\\" R7 W! a
- //System.out.println(e);
- \\" j0 `! t: [, p8 z2 z# d8 k
- e.printStackTrace();7 y8 H/ d2 T( F) ^: d7 y- G
- }
- 6 L+ X# `& }4 k+ Y6 y$ u$ X. x
- }
- N+ f+ d/ U) ]8 B, l3 |% J3 |% }7 V( b
- }0 X1 o& t# n6 C: F( I0 G' j
- , Z/ h, i. A4 U; r; q: D
- 4 S( d\\" h* Z\\" N: y
-
- 8 Z8 u% S8 G, g# C5 _1 f\\" D
- : I- f9 z& l\\" K# E3 b9 g/ l
- (3)合并单元格、格式化单元格等
- 6 s* [% t( ?: s* S1 \; c) }
- 9 B2 P0 @# L Y\\" R
- 1 ]6 j, e\\" m3 o9 @$ H1 W' m1 V
- //合并单元格并在单元格中输入内容
- . R5 R P/ ?( c. ]2 S. ~
- 2 w+ k+ M1 Y: v7 u
- package additionalproperty;) b. P& n. Y8 ^! A; e W\\" b
- N0 I! q/ x6 s\\" U$ q
- import java.io.*;
- : m# R/ V, a\\" l( k& o% k2 p9 J9 U' T
- import jxl.write.*;& Y# Y9 F! h\\" G
- import jxl.*;4 B$ `7 M. O/ V, x3 r$ N5 [& O8 B
- 4 J* S8 D/ p: s' r% | [9 G/ S
- public class MergeCells {$ R& Y/ O1 A3 W( ^ j) `
- public static void main(String [] args){
- ; b4 Y: H8 x+ I0 o5 P' `; c
- try{
- 6 D- }+ B4 I% B
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));* ], k7 p K* M\\" f
- WritableSheet sheet = book.createSheet("第一页", 0);
- . K( J6 r( }: |8 X& L& j8 m
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- ' d6 d\\" V: f$ S. W- g8 O
-
- 9 f* \' e1 `: H( X. P
- //设置填充内容的格式2 Y& n1 m( N9 [, O: ?. P8 l
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);9 g; y; Y' i6 | d1 t+ k0 ]' Q( b
- WritableCellFormat format = new WritableCellFormat(font);
- 7 Q) M8 r) f+ s$ I% W
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
- 9 B- L% a\\" E. b; t
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中* ?% j* K, p8 ?+ F* U7 W# a
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
- $ A% y u& U4 ]0 g
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- 5 P+ h$ K4 A. w: P) W+ d! p
-
- 5 o7 [/ S2 B k1 Q* ^6 {
- Label label = new Label(3, 3, "合并", format); //添加内容. W) ?+ K- ^) }0 X+ C
- sheet.addCell(label);
- I* c: p% i: `/ ]8 ^$ L
- book.write();- @4 j0 F6 V( f\\" j9 ?& p0 [0 ]
- book.close();
- 0 b# M1 ~. Y- u. D& R
- }//end try
- 2 M( S z, B% \, b
- catch (Exception e){
- ) E0 Z4 x$ x S9 r F5 g2 U
- e.printStackTrace();\\" A; R0 d) A( x4 F, O# m4 H
- }: g; f. u/ P+ J! f! A! P5 _1 L* I
- }
- & e# ]6 A/ n& N3 _; L, _+ k% A
- }/ q\\" v, e! D6 ], y# W# W
- * V$ m5 x# r9 q, `1 b+ g
-
- ; L3 g4 Q- Y3 n# g( x$ v7 N5 I
- e& y( d: f8 Z5 m, ?
- (4)添加图片6 Q0 s\\" r; V) @: J' s
- ; @- v) N% `5 D: X
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- , E/ {0 K5 U: u/ \: g7 L( y8 @
- & P; H5 M5 c* | K5 \. ]
- & ]2 a; `2 C; a: F\\" f# ^
- //在工作表中添加图片9 U6 R2 a/ V* t, { k; g, l0 I
- ) k) R\\" v; _; x6 B; u
- package handleimage;& _* G\\" i$ `- Y
- 6 L: B) ^, }, ^8 P+ w+ |
- import java.io.*;
- \\" L9 q* E, k+ }) e) X, X; D
- import jxl.*;
- 0 i9 H2 D: N5 c0 q
- import jxl.write.*;% N, O$ d \( R; M- j! ` X
- $ i' d+ L# ]0 o; D7 |
- public class CreateImage {
- j7 u3 k3 O, |: N
- public static void main(String [] args){
- - D; x. n6 j k3 M\\" p1 M& b# g
- try{
- % r# i* k1 E+ f& y$ \+ F; m\\" A
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));% @2 a1 p% `) v `6 t3 Y
- WritableSheet sheet = book.createSheet("第一页", 0);* i; H5 l: T/ E+ \! P1 C
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式2 V% Z, u8 M- n! Z
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));) B' T2 |+ s2 O! \6 V6 |
- sheet.addImage(image); //添加图片- J) u; ]2 g$ F\\" R* T: U. C
- 1 o/ d, q* O* X B
- book.write();1 w/ u& F, X6 |\\" \: r, {( {
- book.close();8 l: {, o+ j- I$ I$ i) p2 G
- }//end try
- ; |0 ?) ]* O5 N2 a. t6 r2 `9 |
- catch (Exception e){ e.printStackTrace(); }1 \0 a5 Q L+ U7 Q
- } c8 s$ V\\" W+ P: G
- }# \* a/ j/ A$ v2 B# p
|
zan
|