- 在线时间
- 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的使用方法。
- . O$ J4 Y4 s6 A! L6 S+ a; m9 Z+ T# h/ `& U
- * W, F9 c/ u; c* o2 G3 ^
- 1、环境配置
- ) i8 O\\" b# x% S& ^8 d# r8 w1 q+ J
- |( Y7 E# C' d3 E# E+ a\\" I+ @
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html4 g5 h5 V$ \- f# z4 ]
- ; S E: u4 o) n3 F. j) g& P( k/ ^
- 下载完成的包解压之后,可以得到如下几个重要的文件:3 r E' I: S0 E3 L, ~8 Y2 o
- ; l' |$ i! W0 A2 O0 R5 n7 m( h
- (1)jxl.jar —— JExcelAPI 函数库;
- / l7 g4 F4 \$ a! B% S- a
- 9 N& `$ }. e K& x V+ }
- (2)docs —— 帮助文档;
- & Q; W' f0 D) d2 j0 v
- 9 A( n8 V: T\\" n
- (3)src —— 源码文件夹;% h, p, r! v$ t\\" H2 ?# x8 a7 V
- 2 q- [: }( i' z B\\" j- h
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。' Q. U5 R7 |3 k9 }$ s
- . l, \3 L# R* s! z
- 2、Excel基础操作实例8 p, T: B6 G% r1 W; R4 P. P
- ! ^, q5 t\\" t3 K# E8 C\\" b
- (1) 创建Excel文件 ( @* n6 Y5 W, E; Z
- $ }# U# ?: D, r1 e4 e2 ~5 s5 ?6 j
- /**读取Excel文件的内容 \\" w' h1 j: A% n* U
- * @param file 待读取的文件 . t, Z4 o+ {\\" p( W4 |4 T
- * @return // 生成Excel的类 */$ ?4 H: R0 o) e. v$ t
- package createxls;# L- E\\" N( t* K# z2 Q3 F+ f& L
- + ]: N. A& e( t0 L- L0 ?# F1 h
- import java.io.File;
- 2 a) p o2 s) Y7 j
- ) P2 I- U\\" d( d9 l- j
- import jxl.Workbook; 9 R* Z. d( d! C. M
- import jxl.write.Label;
- \\" @ E! H; f$ D6 E0 N+ f3 Z
- import jxl.write.WritableSheet;
- 2 b. ~: f* Y0 w- L/ W
- import jxl.write.WritableWorkbook; 2 {7 u& W4 z8 n, ^! L- B
- 4 g& f$ d3 D# W9 x: s7 [ h. i
- public class CreateXLS { 4 n- ~0 K# ~1 c& ~% H5 Q
- public static void main(String args[]) {
- ! |# z2 z8 C4 R, S2 N
- try { 3 \0 X4 S% P, ?1 [& O3 t V. Z
- // 打开文件
- - z2 u5 f- U3 Q' K' n
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); / r9 g0 H7 o2 [; p) Q
- // 生成名为“第一页”的工作表,参数0表示这是第一页 & a, v' D9 p5 ~8 f; X8 Z/ } V2 F
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
- % b, C$ Q1 L3 ^
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
- ( j: n; _ C- Y! N' ]4 ?
- // 以及单元格内容为test
- 0 r1 q* X0 |8 H. d
- Label label = new Label( 0 , 0 , " test " );
- g: C1 _) p6 L2 R3 ?6 ^7 r
- & S! E0 E8 e, F! U$ N! R' v
- // 将定义好的单元格添加到工作表中
- # v. c- L. M. u+ k8 B$ A% O
- sheet.addCell(label); 3 k3 c; {( k$ ~* t
-
- , n* r1 K% M4 B
- // 写入数据并关闭文件
- \\" M3 I& B- T4 f+ w E
- book.write(); & J% M- b& F; z% D7 z: G3 r
- book.close(); A6 T! j( J. s
- + W: S& h) w6 }4 T
- } catch (Exception e) {
- ]' C6 W4 U; h- X$ X+ [1 f
- System.out.println(e);
- ) |8 f1 z4 J+ F' Y. }3 R2 d: @9 d
- } ; Z\\" O9 X5 c. S- n) N
- }
- 6 g8 E+ l6 o9 A+ ]' U
- }
- 7 u2 N) g) B8 d% z( R5 F$ y! `
- * M$ e8 u$ k3 {4 p1 X
- - F7 {, j- j3 K
- % O1 y. w1 E% u2 S
- (2)读Excel文件
- : R8 F1 N* w* U
- 8 B) C6 e/ I# c; Z7 H
- ! F5 A2 Q! ~6 H. J) ~- h! _' A
- package readxls;5 W' `# J1 \- i
- 6 \: Q! O1 K% c' p3 o$ A4 d$ f
- //读取Excel的类 3 {4 f\\" Z1 L/ ^1 x# B\\" ?# I
- import java.io.File;
- & Y5 h) I; T; B5 G1 F% O; b
- - t% E* j9 Q; u! Q4 R! C
- import jxl.Cell; 5 O2 l. p0 \3 @. X
- import jxl.Sheet;
- ; S% @0 y7 r3 |2 j0 U
- import jxl.Workbook; 9 B; u8 ~* r3 O+ ?! q
-
- ( \: q& _: o\\" E- v
- public class ReadXLS { 8 _\\" N7 S/ _( T3 p
- public static void main(String args[]) {
- ! O& w9 ~: V+ i h1 M8 s+ b
- try { 0 U) K6 [$ m, x% x+ a
- Workbook book = Workbook.getWorkbook( new File( " test.xls " ));
- : J1 L5 b% C! {# ]
- // 获得第一个工作表对象 0 B- Z1 L3 ?1 y* C4 ~6 g\\" q8 {
- Sheet sheet = book.getSheet( 0 );
- 8 O3 G0 S3 P, |) }/ \) i. X\\" O* B
- // 得到第一列第一行的单元格
- - x& i& w9 F* q% f4 `; O
- Cell cell1 = sheet.getCell( 0 , 0 ); S e7 R/ T* n9 W; c
- String result = cell1.getContents(); 6 T K! M- H4 r) B# e. G
- System.out.println(result);
- 9 |' o- c, J0 G2 {$ x\\" R$ ^* ]
- book.close();
- % _6 a2 @7 k) v\\" ^
- } catch (Exception e) { ' o# |+ ]! ]7 d. C2 V
- //System.out.println(e); - y y* Y* j7 N% S8 H+ j' ]
- e.printStackTrace();
- , n) e' A( L( P
- }
- 9 g' L' G; t: E
- } 9 P8 x3 X R* ?8 k/ `) ~& H( S
- }
- ) `$ ]. b! t+ ?$ E
- * a, i. n+ q. V9 Y2 Y* N: Y
- / t, B$ A* Z5 f, N
- 5 m9 C. e* f4 |6 B8 d0 A6 a
- 6 D: z$ f7 w/ a* N+ F
- (3)合并单元格、格式化单元格等\\" B: _1 [- C3 `. ]+ k P: X$ [
- - W1 q\\" {5 }4 ^\\" U& ~
- K3 }( |\\" u; G& A
- //合并单元格并在单元格中输入内容! h: q% X1 v& E& `/ h
- ( t; {! j2 i4 I* u$ k) x8 T. f
- package additionalproperty;! u. f4 \\\" q8 X2 e
- 7 r8 s% h* R( E y3 S1 U8 A' N
- import java.io.*;& Q* }2 j2 m6 z h6 z4 w v
- import jxl.write.*;0 c9 g- m' p9 L. Y2 N7 f7 g- Q
- import jxl.*;: X- V2 s& B7 n5 C: q. ~
- ; N% e5 t7 J1 v
- public class MergeCells {! h' a' Y/ z2 D% W7 T
- public static void main(String [] args){3 e3 Y0 R# v# L& U
- try{
- \\" X/ c5 ]0 W2 L7 C) X
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));4 K) _( B) R' S
- WritableSheet sheet = book.createSheet("第一页", 0);
- 9 r2 D8 C) }$ s1 G7 P' p
- sheet.mergeCells(3, 3, 6, 6); //合并单元格
- n4 _- H) |8 S$ f+ N\\" L4 i
- 8 G& [! F; v* |: R5 H
- //设置填充内容的格式
- ( E# O6 a7 y! M0 N! p& F
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
- - z9 \; |\\" }- n( N
- WritableCellFormat format = new WritableCellFormat(font);: r5 U5 R- s# ~ n
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中% J z& n2 \2 o8 K9 v! m% G\\" ~: v
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中' R* ^2 x, g6 h/ j# Q
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式' _6 F0 i. v+ h3 ]. R
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
- 3 u _% v: X% T& e
- + r3 Y5 E o- _1 ]$ Q/ n( s6 L+ d
- Label label = new Label(3, 3, "合并", format); //添加内容
- p/ j: F6 L- c+ Z
- sheet.addCell(label);
- 0 y/ k/ [* F, E+ V- M
- book.write();
- 2 s. I& q# v7 y0 y: J; w2 W9 ~
- book.close();# K3 `( u. w( j& h1 b' |
- }//end try
- : b7 m- ~( X2 g0 {6 q1 w% j
- catch (Exception e){
- * y& A+ Y9 D/ Z6 x( N
- e.printStackTrace();
- 6 L/ s2 d2 d5 |\\" z
- }- B0 G! ^$ j) {. `5 B+ D8 u$ @0 M
- }. P- `) u# T7 j w! i- t1 F
- }
- 1 }$ [* ] N& a6 x7 F
- - y- R8 G7 a* V9 ^% `9 |\\" ], a! `
-
- & P9 J. h; `6 J3 V5 w5 o- y6 ^/ U
- & p6 B, O9 ]& c5 r2 I\\" A
- (4)添加图片
- & Q, p1 ?: }+ a\\" Z\\" G
- # o% [' p! l$ K/ ~
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
- - z/ Q- O; K3 r! U2 h) T
- % x3 b+ d; c0 ?( e; ?
- * ?! k p9 l6 H6 W0 l! |+ {
- //在工作表中添加图片
- % j& {$ k4 \; \, F
- / d; L: t6 S4 a5 Y; `8 ^ q
- package handleimage;: `( m+ |! m9 e\\" Y
- ( b! T& I2 l& r# B+ S- R
- import java.io.*;
- 7 W. _9 D8 U4 i* x c
- import jxl.*;
- : K2 \9 P' S+ `0 j) r# s& h+ K
- import jxl.write.*;
- . ~% [2 {, c. G\\" M. H\\" L* _8 Q
- # x; I9 t. a1 p* r
- public class CreateImage {
- 1 ]( u! l) K v! j% K$ M& m. I
- public static void main(String [] args){
- ; n& R# r( ~2 P6 \1 m
- try{0 A/ U1 k# C1 @: G
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));1 f, j1 R6 y# v& W8 w2 b
- WritableSheet sheet = book.createSheet("第一页", 0);
- , Z8 m& D6 \6 c* v( b, p
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
- & X0 ^4 m) S+ C+ w6 s8 B$ |\\" d
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- % G5 S7 S1 Z- x. v# g& e% d
- sheet.addImage(image); //添加图片
- ! H/ t6 Z! |7 x c; D4 Y( H
-
- % P! A* l+ K4 N; ^5 q
- book.write();
- 8 T' I y6 y7 U# P/ D) Z+ v9 j
- book.close();
- ( ?* o. v- e2 I( @
- }//end try) O; i$ h. X- B( c6 t' x
- catch (Exception e){ e.printStackTrace(); }1 l! J: d+ A7 G0 h0 g0 [4 ~/ l
- }
- : J# Q/ v& p9 {
- }
- ( n; p8 \+ N2 o% i
|
zan
|