QQ登录

只需要一步,快速开始

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

【转】Java操作Excel方法详解

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

937

主题

117

听众

3万

积分

升级  0%

  • TA的每日心情

    2020-10-25 11:55
  • 签到天数: 264 天

    [LV.8]以坛为家I

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

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

    群组2013年数学建模国赛备

    跳转到指定楼层
    1#
    发表于 2013-8-9 11:28 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    1.   JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。
    2. 1 T( k; Y( F9 I9 |0 {: o
    3. 4 b  l% I) J+ H: M2 S  G
    4.         1、环境配置5 R# a/ Z0 G' I' G- ~: J

    5. 8 p5 _  G: f( a9 K% {: H$ C
    6.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    7. 3 \( j\\" R3 Y$ x* B' H: }

    8. : J) ]3 B8 e& s6 X# U/ g8 F
    9.         下载完成的包解压之后,可以得到如下几个重要的文件:
    10. 4 k5 h* v\\" d6 T) |
    11. 1 B( T; w$ I! r# }
    12.        (1)jxl.jar  —— JExcelAPI 函数库;2 [3 K\\" ]\\" Z0 n' _& }

    13. - p0 W9 F! A; ]# e. ?4 l+ v: E7 y
    14.        (2)docs  ——  帮助文档;, B\\" c0 L7 m# @

    15.   Q, K% Z3 |. v  e+ y9 H% w$ k
    16.        (3)src     ——  源码文件夹;4 E+ L\\" O0 `/ o\\" r
    17. ' z/ ^! J( G0 |7 |
    18.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    19. % h2 ~' D9 J# F5 D- G) i

    20. ! W: y& d1 X- v\\" w% f, G9 E
    21.         2、Excel基础操作实例
    22. / l% D2 B( {  v( P

    23. 8 l; w4 c, F/ V6 }% Z& f6 E
    24.         (1)  创建Excel文件   
    25. 6 q) k& p, g; L0 t: e  W$ S/ M; J

    26. 7 f\\" }* I- M+ W/ ]& H0 j
    27.   /**读取Excel文件的内容   
    28.   g0 ~1 e\\" i1 x: L8 y: }
    29. * @param file  待读取的文件   6 Y5 G3 a9 c; e8 A& ~4 f
    30. * @return   // 生成Excel的类    */; l& N; s\\" s8 Q\\" J; }/ {. D0 L
    31. package createxls;  z6 f# J4 e4 R* Z( ^7 T6 i/ ^8 B2 ?

    32. ' j# e4 h9 h% X6 ]\\" U- P: T% @
    33. import  java.io.File;   . Q: ]7 k( Q5 z9 t) \
    34.   
    35. + J) n5 ~( K, w; C4 v. L/ a4 P
    36. import  jxl.Workbook;   
    37. 7 {, q3 i1 ]: X! Y5 M' a& T
    38. import  jxl.write.Label;   
    39. ( W& g/ a0 p% }# _# ?9 F
    40. import  jxl.write.WritableSheet;   / Z/ B/ O5 Z: B2 G
    41. import  jxl.write.WritableWorkbook;   5 n5 K% _, f! q' q& _, x
    42.   9 @) \5 ~* L$ N/ P  t' N$ @) g9 B- ^- m
    43. public   class  CreateXLS {   
    44. # _0 }- }9 _' r- G& c* [3 Z( B: ?
    45.     public   static   void  main(String args[])   {   
    46. 2 J# Q( K' X$ p
    47.         try    {   
    48. ; e/ e  \2 e$ _) D$ e
    49.             //  打开文件    - d9 ^9 a( x$ L/ s\\" w- m: p! s
    50.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   
    51. + F5 |5 R- L' @/ D' g+ r% w
    52.             //  生成名为“第一页”的工作表,参数0表示这是第一页   
    53. ; F+ w9 Y3 B0 K4 c' A8 J5 K
    54.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    55. + ], J\\" Y6 [$ x3 w/ t/ C
    56.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    57. 5 s  ^5 G9 f1 `, K( ]0 I5 e1 a1 ~
    58.             //  以及单元格内容为test    ' g% j$ u/ f1 e2 d9 m2 G2 F\\" N
    59.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    60. & M4 O+ e  C% B1 ]+ v
    61.   3 \5 B9 P6 H\\" A
    62.             //  将定义好的单元格添加到工作表中      r/ z) g) W7 @( |& M/ I! F% s9 J
    63.             sheet.addCell(label);   , n/ U\\" C% e6 J: b8 ?8 a. i8 H
    64.   
    65. : W$ f# U# t\\" W
    66.             //  写入数据并关闭文件    \\" Z. E0 a! M! d  O1 _
    67.             book.write();   
    68. * Z( I/ D  q( b. K( x
    69.            book.close();   
    70. * N# b$ y\\" d; T% x# T4 I( Y; `
    71.   
    72. 7 P3 ?, e4 n\\" ?/ u/ r
    73.        }   catch  (Exception e)   {   6 D. I8 ^9 `6 n
    74.            System.out.println(e);   ' j: J. x( i' i+ U
    75.        }   
    76. % q4 u% J& d7 l
    77.    }    2 j  r+ y6 |7 Z
    78. }   3 m% a4 i- T: o! ~/ H

    79. * I  y+ r8 Z  i4 q

    80. 3 g/ Z/ }% q' }( h
    81. $ K5 _/ h/ p! t% B' C0 B/ N* U
    82. (2)读Excel文件
    83. ) x: a; a0 W! F) N6 R& @. ^; J
    84. ( h* @% O4 I3 F- G3 A$ `
    85. ! X4 A+ i7 Y$ d3 F0 `8 `
    86. package readxls;
    87. / {- b3 c$ i( h8 [- M1 c: ]0 |
    88. ) z3 h: M7 L1 a8 d5 w5 a
    89. //读取Excel的类   
    90. / L: v1 r: H* E6 R
    91. import  java.io.File;   ; o) f' ]/ c$ X
    92.   
    93. 4 Z5 \\\" `8 I; ^
    94. import  jxl.Cell;   / t1 [4 o0 B7 S0 [! F6 J7 T, N
    95. import  jxl.Sheet;   
    96. - {/ P6 j* e3 B* z' V+ ~+ R& V* R' T
    97. import  jxl.Workbook;   
    98. ( @+ K! f4 E\\" ]
    99.   1 ?+ L7 s& `  J# X\\" m: y
    100. public   class  ReadXLS   {   , o% ~4 Y: L3 r6 ^4 u& Q
    101.     public   static   void  main(String args[])   {   
    102. ! |  E; V4 O6 i
    103.         try    {   
    104. 6 G8 z. r! H  `\\" A- G1 C6 Y# ]
    105.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   1 X  a+ Q. s0 `+ k* E- z
    106.             //  获得第一个工作表对象   
    107. ' A+ I$ t5 E3 ~\\" N
    108.             Sheet sheet  =  book.getSheet( 0 );   
    109. 8 r6 u\\" T2 B# q, E1 @4 r
    110.             //  得到第一列第一行的单元格   
    111. 0 w7 T& k' M/ L( G+ R* w+ X
    112.             Cell cell1  =  sheet.getCell( 0 ,  0 );   
    113. ! q4 U8 }  ~8 ]* S& m5 L! ^
    114.            String result  =  cell1.getContents();     j2 Y2 z1 A2 [
    115.            System.out.println(result);   \\" }) n. g; |5 h
    116.            book.close();   ; d: K% c8 b4 W% B! y6 E& B9 n9 y
    117.        }   catch  (Exception e)   {   
    118. 6 V' C6 C& S! h) j, `7 ^7 g
    119.            //System.out.println(e);   + H1 W3 R6 y5 \8 @
    120.         e.printStackTrace();
    121. 9 x) w/ O; ]; z\\" D( [/ B
    122.        }   
    123. + n( m9 q! X2 `; r# Y
    124.     }   
    125. ! c/ }! U9 A# W3 z
    126. }0 t2 w, w$ q2 ^' e  y) o

    127. % I, p) f; p, e: l: E0 G4 z8 v+ @
    128. $ k$ R/ W& |6 ?+ Q; ]9 q
    129. 9 R: u7 z( C. j- z9 }5 `
    130. . _+ ?% ^$ U( l: A
    131. (3)合并单元格、格式化单元格等
    132. ! G+ n5 D2 `: s3 a# c( {- Y
    133. , I# w0 K3 x7 ^+ o
    134. 3 U- v% |5 w( r4 [' U/ ]
    135. //合并单元格并在单元格中输入内容
    136. 6 d# x# w2 B% Q1 e

    137. 3 W6 _2 T* y# J5 U
    138. package additionalproperty;
    139. - C& P8 K& c1 x6 o  u* e: [9 D' W! {

    140. % l6 E  S5 J# P7 `( I: s6 t\\" w
    141. import java.io.*;  r9 l& g4 Q0 V5 S5 ?
    142. import jxl.write.*;7 A# I5 e( h8 g# x
    143. import jxl.*;
    144. \\" U, n( ?: n$ r+ C* a; O* D: d; ^
    145. ; W  Y2 @\\" z# }
    146. public class MergeCells {8 P  O# a. m$ n  W& Q' d6 U! p
    147. public static void main(String [] args){\\" F; X' _) S6 c/ a2 a+ k
    148.   try{
    149. 3 z) R4 R2 l\\" y  [
    150.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));9 ?  a8 g. O4 H' G2 b8 L
    151.         WritableSheet sheet = book.createSheet("第一页", 0);7 k' h# M\\" b* N( a& _1 v( D
    152.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    153. # V4 b/ F- l& ?) p
    154.    
    155. 8 D' p\\" H% Q8 |; r! {3 L
    156.         //设置填充内容的格式! W% G9 b, D. j! o! T; E% M
    157.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);9 ]% l, f/ ?4 k3 P* d' c* S
    158.         WritableCellFormat format = new WritableCellFormat(font);4 v& E( j# _0 u( A% i) ]1 V  E4 s
    159.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中
    160. \\" a\\" x% Q* r1 p( B  U
    161.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中
    162. 5 r/ g! k$ [3 z. b3 U& j: l/ M
    163.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    164. % g; @: i: k: s
    165.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式
    166. ( y0 e* m\\" r0 e6 Y& t\\" Q
    167.    
    168. ) Y* p. O6 v8 t# s
    169.         Label label = new Label(3, 3, "合并", format); //添加内容0 k; k, L  d\\" O, L
    170.         sheet.addCell(label);
    171. 8 n& H9 {$ D' x) y1 O
    172.         book.write();% b- c3 W& n! |, `( f# T
    173.         book.close();6 x3 Q: D7 F+ B9 f
    174.   }//end try
    175.   P* x/ N4 e1 a2 J3 k  T: Q* A% [
    176.       catch (Exception e){9 R\\" o& t; |6 E  i. W: X2 @
    177.            e.printStackTrace();  I# A* b, q( |# c
    178.        }4 j2 V; s, ?2 M2 l4 r$ g. o3 t/ {
    179.    }
    180. $ }1 o/ c/ A# \( Y  f
    181. }
    182. 6 c4 @6 {\\" U% l2 E
    183. 8 f( G; Z  S) F1 T. M7 F1 X

    184.   b- o, v- P% d/ V

    185. + q7 {: C  ~9 Z\\" I6 F
    186. (4)添加图片; F$ K8 R) f  q

    187. ; S/ `% F2 ~; c# A: u
    188.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。, n% z$ W4 _5 Q$ i# H5 M4 s
    189. * u1 r7 g* c9 L- o7 a
    190. 5 o/ h9 e: v) ~1 v
    191. //在工作表中添加图片  E9 F2 a  o0 `\\" b# p7 g

    192. 3 f4 `* m8 \9 g1 {2 Z! L) s& A, A
    193. package handleimage;! N' g8 E$ \# R
    194. - ^, X! r- e/ C+ `+ }: _% L# z
    195. import java.io.*;' T! X, B3 _( s  u3 C3 C
    196. import jxl.*;
    197. . m3 K4 X3 j4 A& v2 F! K
    198. import jxl.write.*;
    199. / `, R- C: I& n1 T& P; ]
    200. 3 O) A! ~% E7 d
    201. public class CreateImage {
    202. ! F. W) Q( M5 h0 @3 z  K  Z
    203. public static void main(String [] args){
    204. 0 f\\" c- h* W9 y' @% l9 `/ o
    205.   try{
    206. 9 R  H\\" v5 p: z
    207.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    208. 1 X9 T' t8 u& ]: g\\" C
    209.        WritableSheet sheet = book.createSheet("第一页", 0);9 {/ f) I' m0 j7 }5 p+ p2 l3 h
    210.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    211. 7 o; N  w3 X\\" V/ ?3 j
    212.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    213. , ]+ f: m- L: X
    214.        sheet.addImage(image);  //添加图片$ }1 C3 u  x7 Q/ L( h6 Q9 j1 v+ C; B
    215.      W' N- M0 [& J! ]: t
    216.        book.write();) Y$ h- y2 ~6 P
    217.        book.close();7 h2 L0 ?( J6 A' }, ^5 s
    218.       }//end try9 p, n$ f4 F, W1 l( `5 I0 t
    219.       catch (Exception e){ e.printStackTrace(); }
    220. 7 l/ V# r% }! C, r  {/ O! M
    221.    }5 h2 @, }4 d; {3 k  y9 h
    222. }
    223. $ r, m% [% X. s& V3 |$ M
    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-6-7 02:17 , Processed in 0.391891 second(s), 60 queries .

    回顶部