QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2467|回复: 1
打印 上一主题 下一主题

【转】Java操作Excel方法详解

[复制链接]
字体大小: 正常 放大

937

主题

118

听众

3万

积分

升级  0%

  • TA的每日心情
    开心
    2026-9-17 16:51
  • 签到天数: 265 天

    [LV.8]以坛为家I

    自我介绍
    内蒙古大学计算机学院

    社区QQ达人 金点子奖 助人为乐奖 风雨历程奖

    群组2013年数学建模国赛备

    跳转到指定楼层
    #
    发表于 2013-8-9 11:28 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    1.   JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。( }. _) J* e5 y9 K8 `/ O
    2. 1 e, t$ j, X. e  x& B! O/ h& m9 x$ G
    3.         1、环境配置! o) c3 d1 {( |2 c$ O0 ?\\" i8 g8 c
    4. 2 I. {\\" i% D4 \
    5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html. e& T+ x\\" m9 Y& Y7 n- c
    6. : E- A8 e4 v0 U* Q' e% b
    7.         下载完成的包解压之后,可以得到如下几个重要的文件:
    8. $ C9 b\\" Z- y3 \0 ]6 D$ Z7 r, o

    9. / c\\" c5 ~9 H3 [# H, i* ?/ w$ w
    10.        (1)jxl.jar  —— JExcelAPI 函数库;
    11. 4 a% F4 O3 h% _! |' S, T* f
    12. $ @8 `  D8 H( F4 Z) V/ g. L
    13.        (2)docs  ——  帮助文档;
    14. + ]1 C\\" a$ ^( \4 z
    15. 7 G6 y0 @8 Y0 T9 x
    16.        (3)src     ——  源码文件夹;
    17. + x8 t+ ^+ ~8 q: k  E3 b/ r
    18. 7 V9 t5 X- }2 V# q
    19.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。2 f# l) i/ Q* [. L
    20. ) d  l9 x- N! ^$ S4 ?! o9 s
    21.         2、Excel基础操作实例
    22. % l% f( q+ f; k3 N' W! _; Q

    23. . l9 O6 p& ?2 c\\" F; D0 Y; f. ?
    24.         (1)  创建Excel文件   
    25. \\" q4 b- Z+ l+ E1 P

    26. 9 H( [\\" d( F, {: S
    27.   /**读取Excel文件的内容   6 m3 ?  }. Q; o% j
    28. * @param file  待读取的文件   
    29. : v' r- |. M5 K/ j
    30. * @return   // 生成Excel的类    */
    31. \\" ]\\" n8 G/ l& v, E; ^
    32. package createxls;7 y$ E! o/ @7 p6 c
    33. 7 q6 G# Q  b* d
    34. import  java.io.File;   ' K9 ?5 o- L. ^8 c; I0 t
    35.   
    36. 7 [7 c+ t0 f% y( l6 k' G
    37. import  jxl.Workbook;   
    38. : d; F! }: z4 {% N
    39. import  jxl.write.Label;   
    40. / |( _$ u' G' b
    41. import  jxl.write.WritableSheet;   
    42. 0 P' ^5 i# R/ K/ |1 ]- S8 A( m
    43. import  jxl.write.WritableWorkbook;   # f# S) t  D3 W* o, [0 A* P$ M0 H, I
    44.   - X7 w' u9 C& J5 P( u
    45. public   class  CreateXLS {   
    46. 4 A. t) z8 o/ D0 D4 {  }
    47.     public   static   void  main(String args[])   {   
    48. , C( G. B# j5 Q\\" c
    49.         try    {   
    50. \\" J5 f' m' j. M- o
    51.             //  打开文件    8 D& Z1 ~\\" y3 d
    52.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   0 h- ~* B. e\\" O- R\\" }/ m* c
    53.             //  生成名为“第一页”的工作表,参数0表示这是第一页   
    54. & e/ F2 H' e# o1 [# o+ _
    55.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    56. $ o& Q# E& o# j) o. C& _+ C
    57.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    58. - [& r  }+ v# q8 ?; G; f3 x
    59.             //  以及单元格内容为test   
    60. 0 n. y! L* {( e7 y: U& O
    61.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    62. - ?% P* b; H: `8 D$ ]- ?: B
    63.   
    64. * [6 w* }- H\\" A
    65.             //  将定义好的单元格添加到工作表中   
    66. * r7 S! h4 l. J0 q- h7 M
    67.             sheet.addCell(label);   
    68. . ?* c\\" I& R! Q! j
    69.   
    70. 5 R\\" m( t% ~+ H6 C% p
    71.             //  写入数据并关闭文件   
    72. * d+ f& z% Q( [5 Q0 _  ^
    73.             book.write();   % |( u( p7 @) u* P) I
    74.            book.close();   $ s; S, w- D, D# d. d  V- K
    75.   
    76. , Z: d! h$ J7 y0 t, \. l
    77.        }   catch  (Exception e)   {   . U( S; t6 s6 H- g
    78.            System.out.println(e);   $ ]9 {8 V\\" |( s# x0 ]; M$ [
    79.        }    5 u2 g1 c# K& ]2 t1 k\\" l7 U9 N) ]% p
    80.    }   
    81. + I\\" c3 D/ _- N\\" C+ A
    82. }   & C9 ?0 U& N5 U2 H; B6 L

    83. 8 B& ?6 {4 P2 L9 w1 {9 R6 B9 M3 f
    84. ! C\\" V0 K8 Q# v5 L, r5 ?* u5 o+ g. T4 U

    85. 0 \& B' E8 l! D  u3 @  C5 Z% X
    86. (2)读Excel文件* |. z: c. ?1 }8 g) o. q: e
    87. 0 X# g5 R: B9 Y: ?( ?3 Y( O+ ^* Y
    88. \\" d4 L1 S, b: X
    89. package readxls;8 k; L4 E  |& x& z

    90. : `7 k9 U\\" g( V- m* h/ u; _
    91. //读取Excel的类   
    92. 7 P6 W$ B2 X! q, W) M) w  Z7 h
    93. import  java.io.File;   
    94. / w% a; D9 g1 t) D
    95.   
    96. 4 N4 k8 h8 `- y$ B3 F$ P7 v
    97. import  jxl.Cell;   * F2 u% m1 t2 v; }; V9 D
    98. import  jxl.Sheet;   
    99. \\" E6 d2 |# Y8 z! `2 e  M: z
    100. import  jxl.Workbook;   7 R* A! w( J, i/ T( {
    101.   9 W5 ?8 ^$ M; c3 ?: f
    102. public   class  ReadXLS   {   6 W, x9 x! w2 \  C8 C
    103.     public   static   void  main(String args[])   {   
    104. 9 V# C1 `2 d$ W# H/ ^! z! I\\" I
    105.         try    {   ' Y3 y* a5 q, s: d7 _
    106.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   2 ]* x' N6 }7 M4 b  U
    107.             //  获得第一个工作表对象    $ H3 C% S, R$ W; W$ o\\" j/ m\\" Z
    108.             Sheet sheet  =  book.getSheet( 0 );   
    109. ; G8 P* B! x\\" i9 z
    110.             //  得到第一列第一行的单元格   
    111. + Y' c, f\\" G% {, n( s
    112.             Cell cell1  =  sheet.getCell( 0 ,  0 );   5 }* J\\" E. |+ ~, Q6 `/ I' k
    113.            String result  =  cell1.getContents();   . e# Z. V2 x: i1 o7 O
    114.            System.out.println(result);   2 C! |. H- W* g$ q3 A- e5 I: s5 X
    115.            book.close();   & s, B  p2 A9 t! F
    116.        }   catch  (Exception e)   {   : Y% y) C! W9 `0 \( Q% f5 g
    117.            //System.out.println(e);   
    118. 8 U1 b4 F! s3 G\\" E! m) O8 k; x
    119.         e.printStackTrace();' n( U$ _, p& q  J5 Y
    120.        }    ! [\\" V( x0 g( }6 P
    121.     }   
    122. 4 y0 H5 m' E1 b& I
    123. }
    124. 5 J/ ]1 Y\\" c: i7 @+ l  I  h  O5 K# k

    125. * N\\" d* s* t, m; q9 i* ^
    126.   c& ?; j! e' p( D' G4 z
    127. 1 W! C* w- ?0 [' e, s6 I% ^
    128. 4 i0 g9 h. O3 E& L, o
    129. (3)合并单元格、格式化单元格等* I5 v\\" @  w7 B/ C: K0 Q6 V

    130. ) G: |* _' ^  O  K\\" R5 j, v' O! l

    131. ' u4 ~% k4 N# _& P\\" ^\\" T  h3 S( `+ }1 D
    132. //合并单元格并在单元格中输入内容- M, Y8 B\\" ?3 b' t
    133. 9 ^+ t- H- ?+ X0 K2 V, E
    134. package additionalproperty;; H7 l( O& K# v0 c. D5 S

    135. 3 u\\" }1 @  K7 u
    136. import java.io.*;/ j7 d/ N; z2 }% I
    137. import jxl.write.*;
    138. ) O) I. y( O2 _  S
    139. import jxl.*;: C; _: [2 f* c0 B4 E

    140. 5 u9 o) s/ }/ a) }' n& d- D
    141. public class MergeCells {
    142. , c9 R, u\\" `\\" \% G
    143. public static void main(String [] args){+ c; K1 s5 O4 a. S4 h2 g
    144.   try{
    145. 6 h5 V  \* R5 c) w5 k! D: e# p, p$ e
    146.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    147. + n0 |, Q* \\\" h* Q
    148.         WritableSheet sheet = book.createSheet("第一页", 0);  }\\" A, N) f5 g. P4 D9 G
    149.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格. _; m) b0 S' l2 h
    150.    
    151. . [1 o- B! V5 P; Y4 C* H
    152.         //设置填充内容的格式/ H' Q$ G* G5 y1 K, M/ R
    153.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);. c  D0 m: S1 h* V4 {/ j6 O  M& O
    154.         WritableCellFormat format = new WritableCellFormat(font);
    155. . |. j( S0 D' P6 u' a3 z' }
    156.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中
    157. 4 `' Q1 u! o* S  m. E
    158.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中7 \$ B4 i( I8 O/ l\\" v
    159.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式, b+ l' T; f2 }! Z6 Y+ r; B$ {
    160.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式
    161. 0 @/ p, h3 ^: X3 k# }
    162.    
    163. $ @, Z2 }1 e8 u\\" {4 P3 J; ?2 [5 E3 \
    164.         Label label = new Label(3, 3, "合并", format); //添加内容0 X+ P3 @7 E3 K! ?( O: g& B$ L# {
    165.         sheet.addCell(label);
    166. 4 _7 C  M' Y/ X- p$ ~0 [6 m
    167.         book.write();
    168. 0 `9 H; {; E; M0 C1 x8 Z, h, d
    169.         book.close();
    170. % y  ~6 C5 ?' U* J% e
    171.   }//end try
    172. \\" G* E$ \) w% E+ o9 Y
    173.       catch (Exception e){
    174. - D% R5 @5 h) O0 A8 v' ]9 m2 C7 R
    175.            e.printStackTrace();3 p9 J* W4 x+ X0 l; G6 e
    176.        }. Z& u/ Y4 E9 `) l$ O5 v6 O
    177.    }
    178. * S& u5 O7 W: s! E7 h5 q' x\\" _  V
    179. }+ }* q, M, B2 l! y# @
    180. . @$ |  T8 p. w6 W) j6 t

    181. * r6 \7 A6 q  E7 f$ c$ F: Q5 W) M
    182. $ }+ s  a- h+ j6 ~. W4 l
    183. (4)添加图片
    184. + z; B9 ]. B5 Q0 d
    185. 9 N  Z7 j4 F5 K7 {) d7 @
    186.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    187. \\" A3 u8 p1 r4 p

    188. + h9 s. z  j& k( C6 u( X
    189. 7 s/ z* ]0 Q, L2 V! s
    190. //在工作表中添加图片
    191. ) g. i; ]) @' r/ H) u

    192. 7 B# e) N# x) s# a6 E
    193. package handleimage;; ~\\" R  r2 @0 s$ y/ g# `* W
    194. 4 v  O* T$ O6 j- v) f4 I
    195. import java.io.*;' Z- s; z* F* H( D+ W9 b- |
    196. import jxl.*;
    197. * ~9 E* w. F3 @) P! i; {) |
    198. import jxl.write.*;
    199. 8 n* c! c' r. @\\" v2 @\\" V\\" @
    200. * D8 A5 \6 i, c; Q  j, o
    201. public class CreateImage {% ^/ U' N\\" @' O& R2 F8 X* r
    202. public static void main(String [] args){/ H% q* H\\" k, u9 N' R) X; a
    203.   try{2 C' A9 j: ~# J1 N- h$ H
    204.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    205. & i# U9 b  j, `6 B
    206.        WritableSheet sheet = book.createSheet("第一页", 0);% X9 ~2 _9 e: [3 a* Z# r; w
    207.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式: W% Z7 j  H# T6 H; V  c
    208.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    209. 4 C& N0 W+ ~  j  y: w% G. S
    210.        sheet.addImage(image);  //添加图片
    211. * N\\" T  d5 T, U. S
    212.    
    213. 6 @# S% x8 }% ^8 g6 r9 t6 w. A8 s! p
    214.        book.write();6 o) v! _% m9 a+ Y( j3 |' p9 X
    215.        book.close();
    216. $ K% A9 r\\" M! A- Y- q
    217.       }//end try
    218. & |& G4 M; B1 L/ |- L$ _3 T% u
    219.       catch (Exception e){ e.printStackTrace(); }+ l  }. V. o) U6 x+ q/ u
    220.    }
    221. $ g/ `/ G! q1 t/ B8 x+ w
    222. }$ Y2 V' B5 `; ]  r: n8 x9 {. e
    zan
    转播转播 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    guoaecg        

    0

    主题

    5

    听众

    252

    积分

    升级  76%

  • TA的每日心情

    2013-11-18 18:53
  • 签到天数: 53 天

    [LV.5]常住居民I

    自我介绍
    想学数学
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-9-24 17:44 , Processed in 0.524143 second(s), 62 queries .

    回顶部