QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2424|回复: 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的使用方法。6 g# C# ?( x2 _\\" }+ i  s
    2. . K7 ]: O( Z9 P& f( l
    3.         1、环境配置
    4. / O5 ~! u( e+ X8 |. ?

    5. ; t. U* @# E' m9 Q$ W( @- m1 a
    6.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    7. . @& U- b/ k& d\\" h/ A

    8. 9 E0 g* ]: n% ]6 d/ J
    9.         下载完成的包解压之后,可以得到如下几个重要的文件:
    10. + ^$ P1 g+ @/ V$ N  R' R& O
    11. ; b) v1 c9 c* ?9 l$ o
    12.        (1)jxl.jar  —— JExcelAPI 函数库;6 U: D' E8 ^$ o- |

    13. ( x2 t3 J\\" ]0 E. c/ J: e0 L
    14.        (2)docs  ——  帮助文档;
    15. 9 V( x6 R+ a1 X, \/ i

    16. $ o  q; T$ Z8 h; r2 V! e* V
    17.        (3)src     ——  源码文件夹;
    18. 1 r( g  q: c6 n  D: G

    19. ( H. F4 ~  b- o! ^8 ^* s' V
    20.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    21. 0 m9 [\\" p$ N: _/ d. y
    22. 2 N6 k- c3 S  o0 {- o0 q
    23.         2、Excel基础操作实例4 ~% {% s\\" F7 P3 }& w, p8 d

    24. - I; s9 u$ I3 r4 a
    25.         (1)  创建Excel文件   
    26. 9 b- J4 v$ |4 q' }! Z$ M: Y

    27. & e. @) @8 b8 _9 f& M
    28.   /**读取Excel文件的内容   
    29. 4 k4 X7 c$ l4 l+ g5 o, R8 s1 F
    30. * @param file  待读取的文件   
    31. 4 r6 S( Y0 G5 j5 z' ]9 a
    32. * @return   // 生成Excel的类    */' K! t0 Y; D, V5 S# T' T
    33. package createxls;
    34. ( J5 @* A4 c; T) M$ |' o

    35. 8 n( {( N/ I: G! @1 [
    36. import  java.io.File;   
    37. ) E* K& d( |: a, @, [8 d0 O
    38.   % F0 r  _5 @4 L3 q/ _
    39. import  jxl.Workbook;   1 |% r' i$ S/ x2 e0 U5 v4 [! L( z
    40. import  jxl.write.Label;   
    41. * g' M! ?, R5 P  F
    42. import  jxl.write.WritableSheet;   * t2 d3 Y6 C0 u0 D5 F* _2 y+ i
    43. import  jxl.write.WritableWorkbook;   8 Q: t9 ?3 k) i# }# G) G
    44.   
    45. : X. @& P. I- Q# K! D/ V
    46. public   class  CreateXLS {   
    47. 3 _, q: q0 U4 z, }
    48.     public   static   void  main(String args[])   {   + u: f' V+ I' E' b
    49.         try    {   * y4 J/ \# V4 @3 @7 O6 |' e  H
    50.             //  打开文件      B* O( A2 l+ @/ H% D6 Q0 P
    51.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   
    52. ! Q\\" L% Q* D- h
    53.             //  生成名为“第一页”的工作表,参数0表示这是第一页    # O. L4 C5 V* }4 s, g( X1 ?, R# o\\" I
    54.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    55. , M2 T3 O% y3 y, C1 F1 {
    56.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    57. ) j# M* C9 f) r( A3 o: ?& \0 j1 V
    58.             //  以及单元格内容为test    1 f6 D2 @7 c7 G& W# e% H
    59.             Label label  =   new  Label( 0 ,  0 ,  " test " );   ' {- U. k  C/ v9 S* x
    60.   : r2 k0 c6 x8 i\\" |. ^5 A- B5 u
    61.             //  将定义好的单元格添加到工作表中   
    62. 2 R) u5 [8 ]/ K2 b# Y/ b+ J
    63.             sheet.addCell(label);   8 S( a; n7 E2 L) U) Z
    64.   ' s8 f0 q% j- h# V\\" M/ A& B
    65.             //  写入数据并关闭文件    9 p7 y- H7 X. c, @\\" C
    66.             book.write();   
    67. ; C5 [) [( B( i$ k7 b
    68.            book.close();   6 }& `9 Z$ ^  R8 [0 U( v4 t$ B
    69.     z7 X* q6 q% P' {\\" v) ?+ R
    70.        }   catch  (Exception e)   {   
    71. # g3 F0 d3 j/ ?, k) s. u
    72.            System.out.println(e);   + I; G  U- f/ i* y) c% x
    73.        }    , M: h, X9 w% u8 M. Q8 w
    74.    }    / ^7 |* ~: a5 S' j\\" M
    75. }   # P9 f\\" C1 @4 N8 r3 ^' z, @
    76.   E5 C# g1 ^+ \% \' X

    77. 1 {, F! y9 L% E7 J  n1 q* H

    78. ( N( k3 J' v, o. h\\" P$ F- C
    79. (2)读Excel文件$ l! A9 U% @3 [8 y5 K

    80. + M% \  z0 o8 k! J& k

    81. 1 _* H8 `2 i( \9 M# r0 o
    82. package readxls;\\" J- d6 [\\" S3 q
    83. 7 p2 i3 c$ I8 L3 s& f# e6 m
    84. //读取Excel的类    + F. ^2 P9 `: T: s# D0 T9 E
    85. import  java.io.File;   
    86. - t1 t# C0 z; k5 U+ d1 b( c0 ]' ^
    87.   * w4 u9 Q% v) o\\" g; O: L5 s1 [
    88. import  jxl.Cell;   ' u- b& M& L9 J1 ?4 G
    89. import  jxl.Sheet;   ( d1 M; P& w7 S9 C* ^# M9 w! E3 o+ B2 N
    90. import  jxl.Workbook;   
    91. 8 M/ ]) |+ p8 T& O4 M
    92.   # C% n7 K+ x8 n( ~8 U
    93. public   class  ReadXLS   {   ! H& c& f) n7 ]6 ~0 ~7 X9 Y
    94.     public   static   void  main(String args[])   {   
    95. , p\\" @9 m. B1 ]
    96.         try    {   
    97. 2 o2 i( M, n' ?& o4 v, k: D
    98.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   % ~6 t/ @: k6 x8 G$ N9 |
    99.             //  获得第一个工作表对象   
    100. \\" o  y0 C/ S% O3 v0 i0 W7 I5 I
    101.             Sheet sheet  =  book.getSheet( 0 );   
    102. 9 A( i: K8 I4 b
    103.             //  得到第一列第一行的单元格    8 a) U) |+ ^$ n! G' l
    104.             Cell cell1  =  sheet.getCell( 0 ,  0 );   
    105. : _, p& R! e+ X\\" f- \
    106.            String result  =  cell1.getContents();   + L- g) ]* U# x
    107.            System.out.println(result);   
    108. - B\\" M* v\\" w) Y2 U4 }$ \9 f
    109.            book.close();   
    110. 5 z0 p$ N6 b( G9 ]5 [) k8 i
    111.        }   catch  (Exception e)   {   
    112. : V8 ~. _& z7 W4 [
    113.            //System.out.println(e);   0 }# [3 d  K; B\\" M& A1 p! F, z
    114.         e.printStackTrace();
    115. . K; o. w) v$ f
    116.        }    0 H4 S& x( K% M% t
    117.     }   
    118. * `& w) x& U8 n1 o7 z# D9 {
    119. }5 g\\" D3 t2 b7 U/ c3 T\\" Z, \4 @

    120. ) V  M, W9 c. W7 D$ g% {
    121. % {4 S: m4 B4 K) h! F8 |

    122. 2 n/ l' M: z5 Z) `1 A% ]+ K

    123. ) Y4 b- D# [  @, \, `% G1 [
    124. (3)合并单元格、格式化单元格等4 t9 d: u1 j  e' r

    125. 4 I$ O& I! m) ?: w3 [0 L

    126. $ L! R- @3 z\\" ^
    127. //合并单元格并在单元格中输入内容
    128. ! l. A7 b\\" F\\" u; ^7 e2 H$ H\\" G: [( E

    129. ' m2 |: J5 D3 t1 Z- r$ p
    130. package additionalproperty;
    131. 1 x$ \1 c9 D$ j9 T8 k0 I, V
    132. + i+ b( |/ J1 ~& F; y) r
    133. import java.io.*;+ U2 s7 x. }5 I6 m6 r) E% H1 z
    134. import jxl.write.*;5 D  o% e- e: A4 C
    135. import jxl.*;+ t9 n) G  }\\" N6 F  g, p

    136. # A1 R$ ?6 e& N3 C/ R# m
    137. public class MergeCells {) e( K4 Z3 y: o& o% W# |0 Y
    138. public static void main(String [] args){  t( l1 K3 k! t
    139.   try{
    140. 2 [, [( j6 e2 J3 h! ?% M8 Q
    141.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    142. * I, m8 ]; g+ N' @5 d
    143.         WritableSheet sheet = book.createSheet("第一页", 0);. X% u5 u/ p8 I( ]* ?% r
    144.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格+ k) l# S: {* n# h7 b& D5 ^
    145.    % O7 |0 `& M9 v* i% n\\" a
    146.         //设置填充内容的格式+ M# T9 F$ o1 W$ I  G9 B) F
    147.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);4 G( r* H- W& _0 p& z! m( t6 r
    148.         WritableCellFormat format = new WritableCellFormat(font);# \/ a/ E  {! h& n# j5 [
    149.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中
    150. ; `- u\\" d# D3 B, [; f
    151.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中7 _/ \' j( q+ L3 d7 N' A# d
    152.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    153. & N0 C: ~, c. O0 A- z. }  ^4 d! s
    154.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式
    155. 7 q9 j; x) t4 ~0 j6 U1 T+ i
    156.    
    157. ) T/ j; e9 P/ J! r0 H
    158.         Label label = new Label(3, 3, "合并", format); //添加内容
    159. ) Z- c* M  ^# t2 r2 u: D; j
    160.         sheet.addCell(label);9 |. ~7 ?5 _  P
    161.         book.write();
    162. \\" V3 N\\" S3 E% J& W  A% |: C  q- v
    163.         book.close();
    164. + g7 S3 _) S  ^1 o2 m& d
    165.   }//end try
    166. \\" t: I& D8 J. s
    167.       catch (Exception e){) f7 H5 W2 y3 k, x7 \4 U7 `  x; }
    168.            e.printStackTrace();
    169. 5 R7 U% ]! b, x- z2 J8 T4 B
    170.        }
    171. : X+ k% r0 P) H6 O+ K3 t
    172.    }: h1 ?' w  R- m  g) o
    173. }! l0 f, P- [6 c( n! b) p7 o% i
    174. , `( W# w( U7 p7 Q

    175. ( y) i% L! k  u% V, a9 ^- d/ q* O

    176. 2 d0 n: o( A- @6 o$ I: A/ O( W
    177. (4)添加图片% M' w! G\\" C( a. q0 ?6 n0 H: {
    178. 0 P5 ^0 L$ D. f
    179.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    180. - L1 j6 M! b. Q3 s\\" p) D
    181. ; V5 y* W! K& g! O\\" O* F3 O& t

    182. 2 t. D2 x) X3 u+ h4 I) p* ^9 K
    183. //在工作表中添加图片' Y; y- C: C4 V
    184. ' n: Q0 D/ g\\" G% p
    185. package handleimage;
    186. # f8 O: W9 H$ L, L8 x% R' ~
    187. , I& U2 Z  S\\" ~0 _( p
    188. import java.io.*;  m) S) z3 M- b# \3 N
    189. import jxl.*;+ s, e* v3 C0 t/ l) g9 U( S
    190. import jxl.write.*;# V, A# \: R' o+ |- h; [# p: w
    191. & S/ ?7 X4 X6 R0 l6 B9 d
    192. public class CreateImage {
    193. \\" U3 t2 u$ f% i& `% |# }$ G
    194. public static void main(String [] args){\\" Z2 E/ j  ~# m1 r$ U
    195.   try{. f2 D3 Q; k# a8 m8 l6 F+ N4 d9 h
    196.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    197.   ^# Y- D* v1 g3 B1 D9 ^# H
    198.        WritableSheet sheet = book.createSheet("第一页", 0);
    199. ' d! ?3 Z: [; n/ J3 I
    200.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式+ M# Q4 s9 O. Q% I\\" t
    201.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));6 C) F; t9 X1 p- G; R4 b3 j1 z2 X\\" ~$ H
    202.        sheet.addImage(image);  //添加图片8 P: ]' S5 u, j+ q, E. }\\" ?
    203.    ! d, A5 J# N' ~$ i
    204.        book.write();
    205. % f\\" F' S$ e6 O
    206.        book.close();3 F, S& v* S2 V5 b5 v: N6 e
    207.       }//end try
    208. . S$ p3 [6 \0 S9 e/ p$ A
    209.       catch (Exception e){ e.printStackTrace(); }
    210. 5 C4 u' Y6 I! ?1 R, r
    211.    }) Z( j' s6 p/ }% o5 I8 x5 f
    212. }) w7 R\\" `0 T6 Z. C
    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-7-24 13:06 , Processed in 0.453331 second(s), 61 queries .

    回顶部