QQ登录

只需要一步,快速开始

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

【转】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的使用方法。. w* Q7 [$ ?; q  f2 \4 H6 e

    2. - F% w& o; d% L& _
    3.         1、环境配置0 V( L- b1 D6 G1 J' f9 Y

    4. * \* [1 Y4 E# A\\" Y5 [# k; n% Q
    5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html3 Z: e6 i  k3 \1 l

    6. $ ?0 |* P# |2 L' g
    7.         下载完成的包解压之后,可以得到如下几个重要的文件:% W, ?0 U6 R) t4 }/ H! F

    8. ( X4 l' J6 d! w# ]9 F& h; D8 U
    9.        (1)jxl.jar  —— JExcelAPI 函数库;
    10. : o' J! x% H: A, W, V  p

    11. / D+ p0 Y) U& l\\" |9 R  c  P  Q' T! x2 J
    12.        (2)docs  ——  帮助文档;4 N3 g0 l6 t' h9 ]* _: f

    13. - V& m! u! V' H\\" O8 h( x  @
    14.        (3)src     ——  源码文件夹;* O: l2 g3 u' r- E% c3 u8 H  w
    15. * F9 N\\" m- W+ G$ y2 x
    16.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。' A$ i1 Y% k5 Y  R

    17. $ f7 j: y9 C/ C4 ?& U
    18.         2、Excel基础操作实例5 e& k9 S6 H2 v1 b( B
    19. % n+ H' w3 W6 W8 ]4 k! r1 c: f
    20.         (1)  创建Excel文件   
    21. 1 f1 R; d0 r6 V

    22. ; V4 s9 O  |- k7 m# w1 R7 v
    23.   /**读取Excel文件的内容   4 K  J& T4 Q4 q6 A9 g: Z
    24. * @param file  待读取的文件   7 C' J! d6 n& \2 N\\" V& f/ E
    25. * @return   // 生成Excel的类    */+ m& u1 o' W, B. v
    26. package createxls;
    27. 8 F: S; }$ E$ k. R; S
    28. # E: m* w  d- u; K\\" K
    29. import  java.io.File;   
    30. ; p: R1 @0 P$ u' T
    31.   
    32. - O7 r  f9 Z\\" y! r
    33. import  jxl.Workbook;   ( J( `# }1 C; j( C3 J+ L  Q2 C\\" o
    34. import  jxl.write.Label;   
    35. & }\\" F; F! U+ Q\\" q\\" w\\" L\\" B0 T
    36. import  jxl.write.WritableSheet;   8 _' S' B' u, O2 Q
    37. import  jxl.write.WritableWorkbook;   
    38. 2 K; s* E9 m0 c+ |
    39.   
    40. 0 \+ y( L+ `! T! g, `4 r
    41. public   class  CreateXLS {   
    42. 3 u% z$ ?- l5 y  T' r; q
    43.     public   static   void  main(String args[])   {   . e9 v& ^. U\\" F% Z$ f2 Z\\" u) a7 y. [8 |
    44.         try    {   
    45. % q1 D( @! ?) l0 `
    46.             //  打开文件   
    47. 0 _; D& P4 a* @
    48.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   
    49. 0 [; R% G& n/ @% y\\" ^
    50.             //  生成名为“第一页”的工作表,参数0表示这是第一页    3 t. P, v) j1 [\\" V
    51.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    52. & {5 P. ]( r) q) `
    53.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   0 X+ s/ _- \& H8 F
    54.             //  以及单元格内容为test   
    55. ( v& g\\" H- R0 u* ?) T) P
    56.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    57. 7 x% m/ q' X5 U\\" K+ _
    58.   ( G& i) }3 k- ?* D4 x1 Y, w
    59.             //  将定义好的单元格添加到工作表中   
    60. ' s/ G\\" ~0 |5 D0 g9 @
    61.             sheet.addCell(label);   
    62. * M- F/ K- }4 H, s
    63.   
    64. 4 O\\" Z: `+ S4 y( [- F) H! ?\\" Q
    65.             //  写入数据并关闭文件   
    66. : T  e) k1 ^( o8 V0 X1 Z1 B; ?
    67.             book.write();   
    68. : u) ?3 f4 B% f+ S+ J! e7 t; f7 G
    69.            book.close();   + `& N9 \, c7 E: Z+ G% k  a
    70.   % Z6 m7 p5 {. ^( E# p. q/ O
    71.        }   catch  (Exception e)   {   
    72. \\" c+ F: |* S\\" w8 [1 I
    73.            System.out.println(e);   
    74. 8 n. \) P2 t( Q  R& Z$ g# O
    75.        }    ' {9 S/ ?- ]% ?# \, q, ^/ E: ]+ U
    76.    }    3 x% M5 C; V4 p4 V# f
    77. }   
    78. ; _; ~$ T/ G/ c: t+ i' y
    79. / q8 w\\" W8 E$ e$ f: ^6 y& O\\" D
    80. 9 e4 m/ E& l& r\\" I% t
    81. ! i+ n\\" N' ?1 B5 B. q7 |
    82. (2)读Excel文件5 v! ]+ E; p& V; \

    83. . B( J. _, B- D9 x  N# S

    84. ! q. r, h  y5 G' J. p
    85. package readxls;& @# Q( e6 I+ T\\" p! U' d

    86. 6 ~8 M( J2 j7 T
    87. //读取Excel的类    \\" h% C\\" a9 O$ K% w+ W' S
    88. import  java.io.File;   
    89. 2 b) U& H9 D7 w* N
    90.   
    91. : A: v* C7 R. ^1 t
    92. import  jxl.Cell;   : i- Y& V% S; [7 b! G
    93. import  jxl.Sheet;   
    94. ' k! D6 n# k1 o* [
    95. import  jxl.Workbook;   
    96. 8 T/ w: l\\" C% Y8 c5 x
    97.   
    98. ! ~6 o6 r( G, A' ?  w2 \- j
    99. public   class  ReadXLS   {   
    100. * z! \5 j+ `( i\\" |2 B3 U
    101.     public   static   void  main(String args[])   {   
    102. # M  k2 ^5 p. i6 J
    103.         try    {   
    104. 0 b& @% E% ~) x\\" {& M3 K# ?
    105.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   : n\\" _* g' q) Q8 D4 M
    106.             //  获得第一个工作表对象    ) n4 E( A2 G4 a
    107.             Sheet sheet  =  book.getSheet( 0 );   % H9 B% n/ }. h
    108.             //  得到第一列第一行的单元格    0 l7 J+ ?/ z* s; l
    109.             Cell cell1  =  sheet.getCell( 0 ,  0 );   0 s8 R% s7 l8 @1 Z8 a
    110.            String result  =  cell1.getContents();   
    111. * U0 r! ?+ s8 z& Q% }# w$ W8 G/ j
    112.            System.out.println(result);   
    113. ; l) O% w2 n- a
    114.            book.close();   
    115. / x6 i4 n\\" z4 R. {  h( p1 L$ P- J, H
    116.        }   catch  (Exception e)   {   9 `3 j( `2 v6 y' F
    117.            //System.out.println(e);   % I$ Q8 {' e2 ~\\" u1 y
    118.         e.printStackTrace();
    119. ) o9 l& \6 Z$ |7 U
    120.        }   
    121. 2 |! r8 A& l4 C: y/ e
    122.     }    ) ]# A$ Z$ X, s' o& M1 v: p
    123. }
    124. * A4 _0 a  A/ b6 m9 e, \' k

    125. + F- X# y# N\\" l* J) m
    126. \\" @' ~7 A+ Z5 i3 i. l

    127. 0 N3 e- P3 T1 }! N  ^3 c\\" c8 s- L& H) n6 J

    128. 5 ?' n1 Y3 C4 K  s; m
    129. (3)合并单元格、格式化单元格等
    130. # x1 R; z\\" y$ `

    131. # ^  t  n+ J$ M0 Q+ z7 E8 ^1 W# Y
    132. ! u$ F# `8 Q8 `& u. v
    133. //合并单元格并在单元格中输入内容$ s4 G\\" \- n0 F, z  j
    134. 4 y+ c1 J, a! q
    135. package additionalproperty;
    136. % |' z. ^5 F8 |8 p. k* i
    137. ; s& g+ G0 j* n: \; D
    138. import java.io.*;
    139. $ V. w  V$ ?( ^+ h8 H) u
    140. import jxl.write.*;. Z1 R% L- r/ \8 w$ C6 `5 h2 W
    141. import jxl.*;
    142.   u$ ]( F& c/ q! I; O

    143. 7 I6 Z5 ^/ }5 `2 {! V5 }' \
    144. public class MergeCells {
    145.   L% Q5 O& f/ {
    146. public static void main(String [] args){
    147. ; ^( c! O# f: w# I  X2 C
    148.   try{
    149. , T* y# ^4 [- o( L  Q\\" I0 p# d
    150.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));' H2 H$ Q  B- @& v* S
    151.         WritableSheet sheet = book.createSheet("第一页", 0);3 z- l% [% u6 n( a( u5 V- W* X9 ~
    152.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    153. 0 n. X8 k5 D( K! C* {\\" z: v! f
    154.    7 Y- b% b/ B+ j( o4 h
    155.         //设置填充内容的格式; v9 {% q+ l# y! k7 C+ e
    156.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
    157. ) G5 ^. m# f9 W- f$ R1 P$ ^
    158.         WritableCellFormat format = new WritableCellFormat(font);0 ]/ W8 w- m% b- _) T- D1 c
    159.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中/ R. v; p5 x) M7 `( ]& [% y6 K. T
    160.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中  ?. k# n9 m, {& ?
    161.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    162.   z7 R9 |# n- k  W0 ]7 _
    163.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式\\" Q9 U/ ^* y' M' m0 d) }. B- s
    164.    5 G' V' F: j3 ~' v\\" r* f# j, I6 F
    165.         Label label = new Label(3, 3, "合并", format); //添加内容
    166. ! p0 ]2 {8 Q2 x3 k# x
    167.         sheet.addCell(label);, g8 I9 M' E4 C# K% A0 p  }
    168.         book.write();. f0 v4 a8 F8 P: d1 y% b\\" T
    169.         book.close();
    170. / C' ]# K: G3 e, j; a0 `
    171.   }//end try
    172. 0 U6 S+ ^' o+ S6 D' g
    173.       catch (Exception e){
    174. ) Y$ r* f9 p5 l# d: ?; K. F& x5 x
    175.            e.printStackTrace();8 j5 {; G8 I: e, w
    176.        }
    177. 4 z8 k, H# d) D7 `3 F/ P
    178.    }
    179. - [; Q( J; _/ |; h) o\\" e
    180. }* D; [# Q3 A9 y# d& o

    181. 4 y+ m! K9 Q: x# c& {

    182. ' }# g* r) O1 O) V7 V6 e) i! ~. m
    183. , O* l; L9 R( \( `1 S3 X
    184. (4)添加图片
    185. ; y6 n1 D/ Z# a5 i5 J) ]% f

    186. 4 x; X& U0 G# G
    187.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。  [2 G) k$ L2 W3 o3 D+ r( y, a

    188. 4 l+ c\\" W1 G, j3 U7 h

    189. ( L$ r/ Y4 b6 L4 V6 v/ H
    190. //在工作表中添加图片
    191. 1 q. k) V5 z9 z* `4 x# O

    192. 7 b\\" L\\" k- b* J3 \- i( W
    193. package handleimage;/ j! C\\" T! k* Z
    194. , R, X# C( Z) s% M. J2 c
    195. import java.io.*;
    196. 9 o3 @6 |1 {- `1 x
    197. import jxl.*;4 U* _7 Y; r4 l
    198. import jxl.write.*;
    199. 6 p. Q' |7 i$ z8 N& ^$ m

    200. / N& ?5 T% r! w
    201. public class CreateImage {  H  ~* g( L$ W7 j9 ]  t  j
    202. public static void main(String [] args){: x4 L  y  w% c: \0 {3 W4 M, d0 e
    203.   try{  _% Q1 u/ t; Z0 ~& S% Z
    204.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));* q7 v4 ~* J1 k7 z7 a  L\\" V
    205.        WritableSheet sheet = book.createSheet("第一页", 0);
    206. 0 i: w' A  s4 C
    207.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    208. ! h1 S\\" \: i& K
    209.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));2 G! \4 y) _\\" j. C0 H
    210.        sheet.addImage(image);  //添加图片
    211. 1 H2 E- g: U! M/ d
    212.    % w* o2 a% ^1 h/ J8 i# B
    213.        book.write();
    214. 5 `& ^3 A' ]3 X/ |9 t4 n
    215.        book.close();
    216. ; {% u. O) k* B5 q1 Y  k0 n
    217.       }//end try1 X' A8 u, `; k' b$ H
    218.       catch (Exception e){ e.printStackTrace(); }
    219. & ~, ^\\" C% a+ L- F' U) Y3 T
    220.    }
    221. $ O) K/ M5 D\\" x/ O\\" |; o
    222. }0 J  ]/ @\\" Z2 N4 k* ]- F
    zan
    转播转播 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    guoaecg        

    0

    主题

    5

    听众

    252

    积分

    升级  76%

  • TA的每日心情

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

    [LV.5]常住居民I

    自我介绍
    想学数学
    回复

    使用道具 举报

    3#
    无效楼层,该帖已经被删除
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-16 14:17 , Processed in 0.480196 second(s), 67 queries .

    回顶部