- 在线时间
- 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的使用方法。
- 6 R: g* m* M6 |3 ^ Z# y/ H) G
- - V& j) G* u* q( U! M
- 1、环境配置
- 6 J9 u0 [$ H) E* U; w3 g a Z* [
- 7 V- R [) j% ?! v+ w: V( v
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- ( \# x, z$ a: c0 Z/ P
- # \7 m( {7 _8 @( I
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- ; ?, H) |! p; k3 x! v
- / I% a9 z\\" I0 C
- (1)jxl.jar —— JExcelAPI 函数库;1 J5 O7 \8 z: T& Z- T* G7 {
- , g% w' T8 @! @$ e
- (2)docs —— 帮助文档;
- . @\\" T. R8 g9 M. Y
- 3 s7 t5 b) [, K4 X; x8 [
- (3)src —— 源码文件夹;5 a T# T\\" M4 E. M j* L4 d; l- x
- ( [\\" i* Y5 {5 c5 A1 m3 r, w
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
- \\" u0 P; v\\" `+ U' [
- + p; U4 N. \. K1 {1 e
- 2、Excel基础操作实例% Z) L! c. ~% _\\" `1 F
- ! T# ]; n9 T0 ]7 ?7 R3 t6 K4 v
- (1) 创建Excel文件 ' E, R: g! I2 b7 w0 G( a
- ) I& a\\" }# r# s5 o* L
- /**读取Excel文件的内容
- ! a4 |+ x! {; u; P5 b$ y
- * @param file 待读取的文件 ; x* P6 h! q$ \. C: P* ~$ G( ?
- * @return // 生成Excel的类 */
- 1 u) g7 E' ?\\" Z+ [6 F
- package createxls;1 j$ i* }$ V9 l1 v$ s0 y
- + \/ \. ?. k4 a& ^) L3 {2 U2 Z5 ^
- import java.io.File; 2 h# q/ K* E6 J: h$ I9 n/ o
-
- 8 V \4 r% l9 z! B) k+ y. s: T: l! ?
- import jxl.Workbook; 3 t5 G/ ^( ~- Z8 f
- import jxl.write.Label; 2 ], n& a& S; b2 F5 v
- import jxl.write.WritableSheet; 7 x* i% ^4 K( e- _% B
- import jxl.write.WritableWorkbook; - o( k9 C1 G, `
-
- % w* s: y* F+ U, |6 c/ D: C- r' G/ j
- public class CreateXLS {
- 1 I: R# k% r9 V J
- public static void main(String args[]) { $ C; h\\" Z/ A6 c ^7 W1 R* L\\" j4 K
- try { \\" R% F* R9 c3 o0 r
- // 打开文件
- + ?$ i7 E) s a' z( ^2 p2 I
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); $ b% R7 c- i7 a3 i/ R* D6 s6 Z
- // 生成名为“第一页”的工作表,参数0表示这是第一页
- , m8 q! ~/ H7 X' c. J
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- \\" D\\" a8 p- |/ ?/ @( d5 D) k2 u
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) / G6 l! m4 j4 I5 @
- // 以及单元格内容为test
- \\" [2 u2 D/ ], M. E, A8 O! }! u
- Label label = new Label( 0 , 0 , " test " );
- / l( e* p o |7 W o4 k# e0 b' q% W1 \
- 1 N) ]' `$ `\\" S+ v0 F7 P0 V
- // 将定义好的单元格添加到工作表中 + p: v% l: h/ d: Y n: e$ R
- sheet.addCell(label);
- 2 I$ h* p: s |) l
- ; F+ Z( a! |2 U* w- g
- // 写入数据并关闭文件 ' k& h* S4 \ v1 M, m
- book.write();
- 3 X5 M/ d* b0 ^) V# q
- book.close();
- ! p$ a+ X o1 N\\" g: A
-
- 4 X. e5 x7 Y# F2 T8 V
- } catch (Exception e) { : t) y7 J4 |8 `& \ y
- System.out.println(e); / t3 K; r# B# J k0 H
- } 3 Q+ S, R; s1 c/ j
- }
- & H- E8 }\\" t$ o6 p$ O3 E\\" J
- }
- $ l. s) y* T- f1 ^+ p( l8 a
- . K4 e& d: B. D. p' a g
- 8 l# p3 f6 O# c, s\\" [ y7 x
- 8 Z2 r% Z7 v\\" V) k; I: ?- i: ~. w+ M5 J
- (2)读Excel文件- B8 {( \# H/ m2 @* n3 n: M0 j# i
- * L8 w2 K6 [; [% k9 Q0 g3 a
- 5 a( l v7 C e3 g; @- D
- package readxls;6 p F, _& H( ]! S+ C& C
- * e7 A7 I: B5 B4 s5 Z0 Z# R4 n
- //读取Excel的类 ' K# X0 r7 q: S e1 u3 D3 e& J( e& }
- import java.io.File;
- ; v) L1 ?6 [\\" M2 t }% O# M9 Y
- ! X3 j3 Y, \ J
- import jxl.Cell; + H& }* e6 {) Q- `$ `& T, ~) C
- import jxl.Sheet; : J& O# x\\" B1 {\\" p! g
- import jxl.Workbook; 7 f\\" n. [+ e X\\" a7 h! Z# c
-
- / }3 C0 G0 r+ Q\\" P7 g\\" E9 Q+ ?) s: x# M
- public class ReadXLS { / o% q* H2 v- C# U
- public static void main(String args[]) {
- ( f( g. T\\" A- t. C( J
- try { + b; N7 h1 c5 t: G- K
- Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
- / Q4 o9 T7 d L0 w) }4 W. y% @0 F
- // 获得第一个工作表对象 5 Z* k. Q' b2 Y4 f3 q- z# J
- Sheet sheet = book.getSheet( 0 ); : \( o/ Z, ~0 B& C1 N
- // 得到第一列第一行的单元格
- , z1 X0 V3 a0 B0 a\\" L
- Cell cell1 = sheet.getCell( 0 , 0 ); ) N: O! M6 L! ?6 X\\" F5 a: u
- String result = cell1.getContents(); 9 q) u9 R- ]6 U; g3 f2 f
- System.out.println(result);
- ! n- _: @ Q6 S
- book.close(); 3 }: g4 m0 {/ Y# A- n5 k& n
- } catch (Exception e) {
- ) Q/ ]& B$ n\\" ^6 u, x# r
- //System.out.println(e); 0 J2 k& H7 [! C! }\\" x; o$ s
- e.printStackTrace();2 X' M. F8 a5 d
- }
- * J0 Y( w: h; R# v% k3 N
- } 1 O N. v8 R8 Z6 O8 B
- }' s5 D3 h, |( r& k& S
- 4 c0 V5 x\\" L& z\\" W3 g6 I
- - Y6 s# ^/ H! S9 M% t\\" b
-
- ( f- K3 E\\" s* W5 P7 Y* h
- ; s7 v8 I\\" m( w& C7 k
- (3)合并单元格、格式化单元格等
- & t/ x1 ]* X' N
- : C. ^3 r& Q8 m) } l; M
- 0 } c7 `% P/ S- h5 P+ o+ ~
- //合并单元格并在单元格中输入内容
- : H9 d ~1 G) h, W. c8 a
- \\" Y6 `1 ]& X2 g2 U1 j4 y* L* h
- package additionalproperty;( d, N) F( w( M: O m: H
- # L7 k* p0 }4 V/ d) T7 x
- import java.io.*;: O% |' h0 v e\\" p0 M: v* R& Z
- import jxl.write.*;. t, f( [- k- O1 q3 o
- import jxl.*;
- ) e' ?: E. g0 i
- . Q2 \' `6 B) G% K0 `
- public class MergeCells {
- 1 {0 t \8 c' Y0 R3 n
- public static void main(String [] args){& c+ c1 T5 I% J6 h
- try{) |9 d% |$ c% A& W' i
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));/ s E4 P1 b2 v8 W
- WritableSheet sheet = book.createSheet("第一页", 0);; i, ^2 N& ^& t8 s7 f
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- ' t D4 r& J5 I- s$ ~# }, J9 J
-
- & B: f7 M\\" |& X\\" X. D
- //设置填充内容的格式' O, m8 G6 I2 F# t
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
- $ w$ a4 H8 m; ^- c' S
- WritableCellFormat format = new WritableCellFormat(font);3 v: |* I. Y0 P6 N9 s; A
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中' L- x/ U' s1 [, w1 W r
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中# ]8 y; I, a$ X' t- q
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
- 2 V& p. N2 ?2 N/ r1 M8 x$ P/ b% Q
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- , \% Y6 G0 g/ s; [* o8 A, t
-
- 5 @- p6 _* f2 c! ?- `
- Label label = new Label(3, 3, "合并", format); //添加内容 r$ t9 A\\" m: {6 S$ G3 g$ {! }4 R
- sheet.addCell(label);
- 4 g- `, ~) E0 [5 C7 }
- book.write();: K7 L- Q3 O0 w Q
- book.close();% U- k9 E2 v7 u2 Q- i$ s( N) G1 o
- }//end try
- % f\\" c: N' U! X! e
- catch (Exception e){
- 9 ` T- L6 [5 C0 ?
- e.printStackTrace();6 I6 z1 ^. D C
- }
- 0 }' v4 O7 |, [, F) Z
- }
- % r( q! Y( O# B% w6 O* w/ j4 }
- }
- 3 g2 x0 d0 `9 z( @* P7 v* O) P
- - \# Y% ^# _. v; W
- * k F. ?: D# B% T; l0 e
- 5 w2 K# s D7 M
- (4)添加图片9 ^4 L) z/ S# U M1 {# I
- ; R3 }1 W$ e/ ^: U O
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- . d4 s3 P3 O5 F1 c, z% L( }! x) j' a
- ; b! a\\" S& k\\" z$ X
- 9 h( ^+ K! p! B7 C$ H7 j$ e
- //在工作表中添加图片
- 0 n2 `: M1 v, J; r0 e: }, g* j5 Q
- $ A0 b- ~: y& @0 a/ q
- package handleimage;
- $ s' P! }- | c1 ]
- % c( }% J+ h7 r) t- {0 @) a4 B4 l
- import java.io.*;
- 0 ], W3 [: T: K2 W0 p
- import jxl.*;
- ( u! t( Q a: h( o/ g: I+ g
- import jxl.write.*;7 H; V ?, L0 ~
- ) Q8 O' ]1 X# O8 p5 e _5 a3 V* ~2 _
- public class CreateImage {2 j\\" k2 z. ]5 x7 A! G3 a j3 F1 }
- public static void main(String [] args){; p7 N- q\\" g n) i3 G4 G
- try{
- ' N4 ~7 I4 B$ W! N: K
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- + c, y4 X& _/ Z5 g4 {4 x5 K/ ]5 g
- WritableSheet sheet = book.createSheet("第一页", 0);
- & C7 y9 N( P\\" q5 V- J; L3 {1 F* f
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
- 0 r( U4 V; w: D- w
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));3 h0 m: v) C4 P* e' \$ \\\" M; n$ a
- sheet.addImage(image); //添加图片
- \\" c( c$ t' e: i( O: j
- X$ s0 k8 ]2 p* i2 W5 J. d
- book.write();4 Q9 Q8 ]: o- T5 Z# q( P/ [
- book.close();- p8 m; o8 w4 y/ B0 b. s2 I: W6 _
- }//end try$ Z0 c: |0 m# l; {4 F& i
- catch (Exception e){ e.printStackTrace(); }' K* j5 C! f9 |5 y
- }9 f1 k! b) I8 Q; S' E! z
- }
- ' d) {! m9 Q& E9 O# E4 |: @, v# p
|
zan
|