- 在线时间
- 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/ s9 z6 _$ s/ t( k
- 9 u) m; w- f+ b$ J7 n0 L/ {5 d
- 1、环境配置
- + A+ K2 I8 `' Y. d4 M, U1 K V
- 5 |' q5 a. r/ S! R0 G\\" e
- 如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
- ) {0 k* Y& c4 ?, I; M
- / K) U# {% d3 S4 A0 R
- 下载完成的包解压之后,可以得到如下几个重要的文件:
- 7 b3 b6 J) M! w; w. S
- ( e i( T4 F, \0 O# Q
- (1)jxl.jar —— JExcelAPI 函数库;& k6 i/ e9 Z( Y% ]- s
- 5 [/ U0 D4 X) o9 B4 C1 [8 d9 E; z
- (2)docs —— 帮助文档;
- - {7 z1 l1 x$ w2 g& ?. \
- * e4 D$ j7 u$ B5 x, |6 c
- (3)src —— 源码文件夹;
- ! }: Y3 ` c* y% }
- \\" Z7 M: P) U% @1 x
- 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。7 q: q# W8 o0 V- {
- * q3 S\\" O* M7 Q6 i
- 2、Excel基础操作实例* A2 \2 ?7 D; p$ Y5 r; |! H: R& ]1 T
- ! j D8 [; }; z$ P5 i, C% I& T
- (1) 创建Excel文件
- D6 r+ A\\" b4 l\\" a* y( e% \7 s
- ( l( c2 W D, W0 U
- /**读取Excel文件的内容
- 0 Z: e( w3 v! w& \$ u- A' X
- * @param file 待读取的文件 0 C0 l( p; D9 h. A0 t
- * @return // 生成Excel的类 */
- 7 H+ L7 x2 c* g' }5 _% e# i
- package createxls;
- - o* s7 z9 X8 s3 @4 Y
- : r; t1 r5 e& N7 K- l5 ]
- import java.io.File;
- 7 S7 Y- D* Q$ o9 h* z2 H) N
- 9 d* P+ o* R9 T P: c5 F
- import jxl.Workbook; T& ?( Y\\" B/ @; k1 h
- import jxl.write.Label; \\" d+ u' X' O5 E1 @, Q9 H
- import jxl.write.WritableSheet;
- - R, |+ X+ U: w9 s/ y5 Q
- import jxl.write.WritableWorkbook; , ~* t8 v2 s, F+ D1 b
-
- ) M+ X& L1 |) y! z9 [5 h- |6 T
- public class CreateXLS { / X. n4 P' K/ k( O% q# Y, p2 Z
- public static void main(String args[]) {
- \\" D5 T- L+ _' p2 c, ^% g1 ?
- try {
- ; }: e3 Q& ?% v) `9 Z3 ~+ n
- // 打开文件 9 A. Q+ F) a7 {4 }
- WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));
- 6 j' `! S @& V
- // 生成名为“第一页”的工作表,参数0表示这是第一页 0 u9 R- l ?; Q, r2 k+ F3 d' v
- WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); ! j\\" m d7 C$ F5 h: S( j& z
- // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) ' g, e; A/ @) }, N$ ~+ u- w
- // 以及单元格内容为test
- & U9 X\\" V. G0 Y2 X, k
- Label label = new Label( 0 , 0 , " test " );
- ! C, `/ C* l8 t5 Z
-
- % M C1 r# K9 C' b! Z
- // 将定义好的单元格添加到工作表中
- \\" f% W: \3 b2 k$ P% @/ T
- sheet.addCell(label); 0 o* p$ T$ O$ h0 A, F: I
- 3 y: s0 x0 ]: L0 D' }\\" w
- // 写入数据并关闭文件 _8 d( E\\" |) S( G
- book.write();
- 0 F* d6 G L( a9 N6 b\\" o+ m8 n- E
- book.close(); , m2 q6 ^8 x5 J1 Z* Q( [7 x# J: G
-
- % }( m/ P2 q1 u\\" b. j# C8 V6 y0 N2 Z
- } catch (Exception e) { / \, O- {4 o9 w; o9 j8 F4 _1 W8 L
- System.out.println(e);
- 8 H3 F& b7 T0 I. ^+ @4 W; Y( R
- } ) v. {3 p& U7 G$ P5 A
- } 2 p; m1 L2 h! {/ h [7 g2 d6 s' y: z
- }
- 3 T0 y% x* j% X' w
- ( G* o0 o2 I4 `3 n$ i! O8 V# Q; O- P
- 2 _! _+ F+ M; l/ q' O2 C7 B
- * ?! r\\" ?- t- _% o( ?7 k, v+ ?\\" B
- (2)读Excel文件
- 0 C% m6 p8 o0 x: S+ l
- 4 i$ l& [1 F4 b7 j
- . {8 n/ `0 Y# c% r
- package readxls;
- : \6 l+ \- E* E* e$ x& ~
- L0 H4 w6 u4 t& N; T- ], Q/ z+ X
- //读取Excel的类 - L, s _; r+ ^4 p
- import java.io.File;
- 1 m& m- ]: Q- Q6 N: H- }+ M
- \\" V/ s* e$ J, Y( p* B' a
- import jxl.Cell; * ]4 v- r* l: G2 o. V0 F
- import jxl.Sheet;
- 3 g3 \\\" K* B$ \
- import jxl.Workbook;
- 9 @2 x, {( v, N9 u* c8 k8 Q
- * ?- c2 y, H! m6 M
- public class ReadXLS {
- 8 `9 w4 o1 Y6 }2 f6 o# l! G* E3 p
- public static void main(String args[]) {
- $ t. m2 d: I& R7 u+ u# Z
- try {
- 9 f! E0 h* U\\" W\\" i8 U$ c' v\\" J, D
- Workbook book = Workbook.getWorkbook( new File( " test.xls " )); * F\\" C- R) n- B$ C! L
- // 获得第一个工作表对象
- $ e+ u, G: p1 d, u
- Sheet sheet = book.getSheet( 0 ); 3 L, y3 {6 e! Y# t s9 r
- // 得到第一列第一行的单元格 - B8 f% d4 r\\" B( _' }# |
- Cell cell1 = sheet.getCell( 0 , 0 ); - b$ I) R w) e3 E; o3 k
- String result = cell1.getContents();
- ( M k( T- }& z; J1 L H
- System.out.println(result); 9 r8 N& |: g6 m; f
- book.close();
- \\" E! X' y% O5 ~\\" s8 F\\" [
- } catch (Exception e) { + w+ Z% \( z0 q, W' U* p
- //System.out.println(e);
- ; K# B& ]: u0 m- T# U4 U6 M' r$ ~0 J
- e.printStackTrace();
- 8 S7 A* M: A, `( e# T( X
- }
- / z% T3 n* i0 I+ Q5 C- K\\" o
- }
- 1 P* u- Q5 _4 E% c, e- u7 i
- }- z u4 S- e+ C! t8 Y' X
- - o# T2 e3 e5 g0 n5 l& {! d
- ' h. U3 S& `6 I- M5 C% G$ ]
- 0 k% e\\" l0 x4 P' p
- \\" b; }& J+ P% ]( w3 |
- (3)合并单元格、格式化单元格等
- 2 K6 I& z' N& Q7 u4 Q% ^
- \\" F- b7 P- m1 Y3 h! t! P! L1 n
- 5 e% M1 f\\" h0 Q2 d. T* F1 M
- //合并单元格并在单元格中输入内容
- 6 k7 [, F. D; w
- 3 w' a/ ]8 j, |
- package additionalproperty;% P8 \! d3 m1 v
- \\" `- g3 C- p& s& J7 s
- import java.io.*;
- 1 _/ b+ ^- u* A7 D1 U0 c2 A5 w
- import jxl.write.*;5 D( y- I5 Z9 K0 }+ F( y
- import jxl.*;% v' y\\" }0 K+ V5 Y
- ! b r$ c4 b- N/ F1 J, [
- public class MergeCells {
- ! D7 U. X' E ]2 O\\" b% b
- public static void main(String [] args){
- / j0 F; g+ h% E+ p% L
- try{+ j5 R0 V& {& a! B9 _/ \
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));; D: e2 f0 v e% D4 w p% F
- WritableSheet sheet = book.createSheet("第一页", 0);7 V; o% C6 v& r# q2 Q6 Q( \
- sheet.mergeCells(3, 3, 6, 6); //合并单元格\\" `\\" b2 j- D' S1 T$ N
-
- 6 E- e2 I$ v* A& O
- //设置填充内容的格式
- 0 i/ S& i! d5 j- `3 e; D
- WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);8 @ ~; N2 G5 C$ ]
- WritableCellFormat format = new WritableCellFormat(font);3 f; T) \8 K\\" K
- format.setAlignment(jxl.format.Alignment.CENTRE); //水平居中
- & W0 P: L0 r1 T8 r4 B; _& M3 b# Y2 \
- format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中& F1 j+ Y+ K2 \, j4 P
- format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式% y3 u7 Y$ a4 ]4 b% L/ o
- format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK); //边框样式8 M7 x6 a7 @4 d
-
- ; k6 F ]. Q! R, Y
- Label label = new Label(3, 3, "合并", format); //添加内容 e5 Z: p\\" c) `4 L, i% u8 {
- sheet.addCell(label);) T3 ]6 H2 p+ I8 s M5 \9 L% _
- book.write();. |# U- ?/ \) @# u; O: o3 |) X
- book.close();# b t2 |% X( h* k6 U; W
- }//end try* Z$ l, H9 W9 [
- catch (Exception e){- O( O2 r+ Z* {
- e.printStackTrace();
- $ N% L6 l9 B; j. f( q
- }
- 5 l1 }8 [; t7 m9 F: X) n0 N; n
- }% q! Q5 |/ z. A* h! \( G% ]
- }( B\\" Z1 H4 [) o# T3 M2 W2 W
- , \: [0 D* _4 r; {! L: Z' O* z* v
- : B/ k3 I2 ?2 l1 n; x# s6 m
- 1 [; k4 p% F4 a5 C) }
- (4)添加图片8 [+ y) i( X5 x9 i, R6 {1 h( X
- G: z- ^- d C# j
- JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。0 O5 i1 K, W/ p l; T4 V
- - T' d) n9 b& ` g$ G% C
- \\" w* X; E( e! u4 E7 @
- //在工作表中添加图片
- 3 B$ c. t# y/ Y T7 n8 ?8 p
- 7 A9 h6 L! p7 k9 W/ N: i7 W
- package handleimage;
- , \' A; m R7 ^+ ?$ y3 S0 m3 r; `
- ' x& |% I# c$ w7 b/ L! W7 Y
- import java.io.*;3 \ r: c9 J+ p2 i
- import jxl.*;* m% u6 g: @, J* Q. Q
- import jxl.write.*;
- , }4 O: J\\" P\\" o; F5 a& l% J0 s- N
- 8 D6 z/ p( c% O
- public class CreateImage {) l4 I+ p0 i9 `4 U- M' {
- public static void main(String [] args){
- ! _\\" N3 |! ~; O* }
- try{
- \\" ?, Y; V' t2 O9 ?& m\\" V
- WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
- 1 O9 d0 z1 @; k8 |/ x3 e5 Z6 S
- WritableSheet sheet = book.createSheet("第一页", 0);/ U1 k1 f5 l' l) d2 `# A
- WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7, //定义图片格式1 P7 P9 [+ l# @5 U& J4 K
- new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
- 1 j8 L. Q* c& r7 U! t# C7 I( [
- sheet.addImage(image); //添加图片) D' x) I. L9 K9 b! M
-
- + g% B8 Q& V D' V& s6 d
- book.write();
- # W# p: O, K; W% t/ I; N b) I$ W
- book.close();
- $ _3 |' D% e4 \ b- x/ O
- }//end try
- * q9 I9 p, o- }2 V
- catch (Exception e){ e.printStackTrace(); }2 U2 f/ Y2 Z! `' j$ o
- }2 c5 X# f% ^* I' a B3 p! K
- }
- 2 w5 R# x5 \7 R5 S
|
zan
|