在线时间 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的使用方法。/ v8 S: `9 k. l- u* A7 z
, b, W! f, W; H+ r7 _. S( i5 ^ 1、环境配置
* ]! a& z0 F5 ?. g& H ! P# c- y8 ^9 ^5 L5 X7 k! H8 M
如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html' q5 i+ d! k2 o' [ ^. g8 K
* d' {7 Z; @9 n8 |( t. M0 _ 下载完成的包解压之后,可以得到如下几个重要的文件:
6 y0 ]: B2 w1 k8 h8 G* T 3 s$ w7 m, ~* d
(1)jxl.jar —— JExcelAPI 函数库;% X2 ^9 g; A/ Z* r0 S4 i+ x\\" g
9 [ E3 P) P% t! ~' @ (2)docs —— 帮助文档;
0 x; z8 |+ Z t! P. l5 ` * t5 w\\" h8 n+ G
(3)src —— 源码文件夹;! ?* N) s. f& B6 `7 n
( g) U% c, v+ {: i9 @. T2 v d
将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。; R( ?0 G3 A; I. i8 e1 G h$ t! T
* {9 A4 }1 I$ L
2、Excel基础操作实例
$ i* o1 }) q) q0 r0 f $ J m: o5 n5 C! L; I! D. Q$ o
(1) 创建Excel文件
4 u. L) ]* G! e
: \9 e% p6 U\\" c, c /**读取Excel文件的内容
# |+ G1 ^1 b d$ Y9 v3 `% M* q * @param file 待读取的文件 8 V0 N8 p, j) \9 N x F5 K
* @return // 生成Excel的类 */3 R- o7 f; G8 W! a& Q* }
package createxls;9 Z9 Y6 v3 T5 T# M. x) C9 s
$ ]* X. R7 Q, r l
import java.io.File; # T) _ \) W3 O9 y C5 E( C
3 r- P0 Z: u1 d
import jxl.Workbook; $ z1 c; i0 t* k. e4 I
import jxl.write.Label; - |8 k& W/ u3 d6 f
import jxl.write.WritableSheet; ( f( d. k9 f. E\\" N5 X
import jxl.write.WritableWorkbook;
. m4 M% E2 B* |; p* T
: d& L9 t i+ Y) L+ X8 e public class CreateXLS { . A9 q/ O6 ^, e- n
public static void main(String args[]) {
: q% c$ p9 j; ~( R: k; z% ?6 I try {
# o3 n7 U% o, P: {0 r8 a* i // 打开文件
6 k5 k1 J J: }* g9 Z8 K9 ?, _ WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
4 J\\" e1 p5 R0 ]! F\\" m // 生成名为“第一页”的工作表,参数0表示这是第一页
# p; _! v1 d Y\\" U0 k WritableSheet sheet = book.createSheet( " 第一页 " , 0 );
u7 G1 f$ w e# a d: A // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
; P8 E' T+ |+ o0 Q, M7 T // 以及单元格内容为test
% ]9 ~ w, n7 E- ~) `# f0 O Label label = new Label( 0 , 0 , " test " ); ; `; c( B' H( F5 |+ F
: \( I2 m2 I- }6 E* y# c // 将定义好的单元格添加到工作表中 \\" _6 M# Z; l$ k* R9 `
sheet.addCell(label); * M: t; z& I6 g9 `( J( t, k
8 {3 @4 P$ K9 j6 Z5 I9 Z) R
// 写入数据并关闭文件
# y) U h3 r4 Z8 Z8 R book.write();
* S2 ~9 f* }& a$ @ A8 V- m book.close(); 1 d) f7 y% Y! O
6 i7 p+ J% u. e T
} catch (Exception e) { * n! w\\" c$ j\\" X' t) Z/ J
System.out.println(e);
7 v- F5 L: i, t2 I) ` } ' I# }$ B4 B7 ?$ U! y: }2 B
}
/ Y1 G/ j8 q+ M& p* K, E6 d. S7 M } 3 I4 u# \( |4 P) x2 v! w5 ?( M8 x
, a8 f: r+ Q5 `, t& O
. G, r1 ]9 \; N& j4 o* K. F- n\\" t4 C
! q& ?# t# n7 K: z, ^7 Y1 F
(2)读Excel文件
+ j& p1 Y+ ?+ N. i1 d # E4 w `% l r. V% L2 o
. R! Q# T\\" [3 `% t. w% o; } package readxls;\\" V9 u0 R2 r8 d- }! L/ Y
' h; j# M. z* ?: x- u; n\\" _2 M7 A
//读取Excel的类
' b. x! X7 M0 q import java.io.File; 7 B3 [: A' G. Q+ H
: @* x/ m* g, l5 f. l& x
import jxl.Cell; 8 C5 t) K& W3 `0 d# H: v4 d Z
import jxl.Sheet; : t; I6 ^: S! t- S\\" |
import jxl.Workbook; & E' ^\\" W9 q' q# x$ p8 ^
* c) I9 a- V) V' ?+ C+ l, @/ Q public class ReadXLS {
* Q* a6 S% ]2 P6 @\\" z3 j$ e! v public static void main(String args[]) {
. c0 C0 M; ~: s; s try { ! A2 x* u/ `5 i, E [% E2 n
Workbook book = Workbook.getWorkbook( new File( " test.xls " )); , K4 ^# z# K5 L6 m; [
// 获得第一个工作表对象
- f$ _ \\\" d7 o t Sheet sheet = book.getSheet( 0 ); 4 K* h j% c6 W
// 得到第一列第一行的单元格 & ?* J$ |4 Q# {7 e6 g* F* ^$ a( H
Cell cell1 = sheet.getCell( 0 , 0 ); \\" R* e% }$ j0 a0 @, G2 u9 o
String result = cell1.getContents(); ! O8 o& s4 n/ |$ }
System.out.println(result); ) x* q. y: T/ Y/ n2 K
book.close();
2 [4 x! @% e* G0 V: \/ I! {. M } catch (Exception e) {
; B. p; |( T+ U: n //System.out.println(e);
3 @ f- A( h9 D& C3 Y: a. a e.printStackTrace();
0 _; V) K% t& w% @. t }
- z' Q0 P& T) k z& s } $ B7 E* ]7 e; c4 ^# q
}# f) G3 d# u* I9 {2 o) }
% F8 s! X& A; T ) C/ s9 H* r5 A* e0 H\\" n# L
$ b l; d0 o L# S5 s* ~ 5 \& x6 H! C0 r# B/ S: n2 r( u
(3)合并单元格、格式化单元格等! O& {! ^6 `7 b9 S
h\\" z/ W5 d4 P( A5 ~7 |* b, o( B\\" v
; G5 r- }. U% K% q //合并单元格并在单元格中输入内容
# {/ J- N\\" E, G: }: ^3 Z% f+ u
$ T7 b# y* I: V' E6 L package additionalproperty;
6 B4 g5 U# n$ |8 H8 h* R
& P5 J! _- w2 d\\" @& i6 Z; P: @ import java.io.*;
- Y\\" T+ }' E7 V import jxl.write.*;; E3 K- g- i$ l9 n- {) D. F& \
import jxl.*;) H9 y) v P& ?# M2 r& h4 _' n/ n
; d\\" g/ P1 z5 H! I5 `& ~
public class MergeCells {9 O0 {+ w; x5 h& p
public static void main(String [] args){8 W* @3 s' C3 I2 ?
try{) }& F. ^/ O1 \( [, ^! l, y$ u9 N
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
; [; t7 z7 y9 V WritableSheet sheet = book.createSheet("第一页", 0);) x/ Y& z! R9 B' W2 J
sheet.mergeCells(3, 3, 6, 6); //合并单元格- d# f# ~9 s5 M! r
. D8 y% Z) ~! g\\" [$ {4 w5 t7 d
//设置填充内容的格式
* y) y' X3 o7 |/ Y! z WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);+ F) L& @: L. y& F( O. h3 ~/ W2 L
WritableCellFormat format = new WritableCellFormat(font);* g. T: _\\" L\\" l5 F+ N
format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
* c- ^- z' ?& j( {5 g format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中
1 P' `+ h\\" Q, |: w9 A! i4 B format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式, c; ]/ d3 v) d5 L9 j' S' M/ v6 [- ?
format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式
& Q- ~- C3 v1 V4 {* N* D 0 ?# R) |+ G: u# J+ o\\" Y
Label label = new Label(3, 3, "合并", format); //添加内容
O+ V# J5 j3 F1 _ sheet.addCell(label);6 ]. `! @2 c- a\\" h; G
book.write();
- \\\" k) i\\" \6 ^0 o. ~! e book.close();0 {' B/ I9 z8 Y6 D
}//end try
, g\\" H7 b. G/ C& H1 E catch (Exception e){
: j\\" r! L% k# s7 R1 p+ Y0 v/ X e.printStackTrace();
: n5 z* _, m- s7 r3 z) R }
# Z5 o: Y* Q+ m1 [2 H) i6 h4 c }
7 w# |$ A\\" B3 y; C }
- J9 P$ B. l\\" ^. p, m3 M* a7 K % X3 l5 @- m5 g8 W/ z
9 n. i% `5 _/ i\\" O3 b
# s% W! Q( j\\" k# T5 S8 B# |- C (4)添加图片# _! e7 \' j( |, \# ^
\\" O: ?4 |, ~5 x2 I! ]7 _' l JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。) ]2 Q; D+ l4 @, N h3 N; M3 @
' {) ?) R& T6 q L\\" P\\" e9 L8 s
$ k$ f9 d* A: H7 ?/ O9 ]6 I
//在工作表中添加图片
5 ~0 [4 r) H, u( `$ P
`. S4 O. L; x# ^, o package handleimage;. s: d; R: }7 w. K) N7 u
+ e+ t4 e) S0 t\\" b9 g# u\\" Y: |
import java.io.*;
: H$ A3 t8 l9 T& I# x& ^ import jxl.*;
) J( W# Y. H8 A& r ]6 K* R import jxl.write.*;1 f$ |$ C* W. Z( J1 l( O
; B5 j: V+ L6 H# f/ V6 E public class CreateImage {
: `5 y8 Z8 R$ u3 y public static void main(String [] args){9 R4 {/ ^3 F; m. H
try{: Z\\" M2 p$ o! G' }7 R: c6 @) _
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));\\" M3 j2 k( K: p8 ^# Q
WritableSheet sheet = book.createSheet("第一页", 0);9 L6 B8 v0 S8 R* K
WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式
9 F8 H9 u+ [0 y new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- {( `- G* O; m, L' j sheet.addImage(image); //添加图片. q\\" z) V/ ^* [
. [! L M, F! M
book.write();
8 M6 f- Z9 x- W3 U- o* A2 { book.close();
: `9 w: D& O8 `$ M/ [2 _+ m }//end try, i9 ?( m6 K# R% W* }5 B; w1 R& j, O
catch (Exception e){ e.printStackTrace(); }; P4 Y( N2 m. K- }7 T+ _, ]) a\\" r
}
\\" k! h$ m# S+ t R/ S3 n1 M }
' K% J* ]# U* [
zan