QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2397|回复: 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 }9 z, U& b; s4 P% t
    2. 6 E( \\\" w4 h* n4 |: G\\" C% i/ s: d0 \
    3.         1、环境配置
    4. 9 N# X, M  _7 O
    5. 0 r+ L& w3 u, W2 k5 Y0 t1 @
    6.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html- ]! a6 `9 D9 S& x\\" N1 R

    7. 2 m, \; e  U6 x7 G  g- y
    8.         下载完成的包解压之后,可以得到如下几个重要的文件:; D) b4 R  ^3 H6 z% q, E% h
    9. 7 @# }- r1 D# C0 {2 w9 I
    10.        (1)jxl.jar  —— JExcelAPI 函数库;
    11. 1 o, w# x$ m5 P2 V

    12. 1 f& u& g0 O8 K1 z2 b2 }
    13.        (2)docs  ——  帮助文档;' m\\" _( z( a0 n\\" y) `

    14. ! B. }* M. @9 I% I- `1 x9 b
    15.        (3)src     ——  源码文件夹;
    16. ; [/ D2 W+ {5 ^* p. ]
    17. . k6 o% v2 P  m: [
    18.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    19. / [2 d7 E/ N, g3 N

    20. 3 C$ l* K9 V9 I$ g, A
    21.         2、Excel基础操作实例
    22. & p+ E8 l5 V$ _\\" w% C2 |
    23.   v) u$ p9 @$ k$ d* b6 ?0 l0 L) W
    24.         (1)  创建Excel文件    2 R3 l5 Q1 s  g' m) m6 S9 X7 B
    25. - V5 c\\" J, c% I4 |# G+ w6 h
    26.   /**读取Excel文件的内容   
    27. ( A0 U6 f0 S- o' p  Y; {+ _) Z
    28. * @param file  待读取的文件   
    29. + E: E, w/ c0 J
    30. * @return   // 生成Excel的类    */
    31. , a+ e( y# P7 B+ r  H+ U4 @# ^
    32. package createxls;$ \4 D\\" V- n\\" s: \2 j. n# w5 r
    33. 5 ~7 e+ y9 Y/ r
    34. import  java.io.File;   
    35. ( [- T: e' S6 n/ W1 F
    36.   ( v\\" ?% y; w7 L; @; d6 g  F\\" n3 ^
    37. import  jxl.Workbook;   
    38. ! `: B& T7 x4 s/ l* h6 C
    39. import  jxl.write.Label;   
    40. & }: n9 {% Q7 \5 K9 B. z8 \
    41. import  jxl.write.WritableSheet;   
    42. 1 B$ \* U/ o, Z3 e# v, z# X
    43. import  jxl.write.WritableWorkbook;   6 O' F# N- t+ P: Q
    44.   
    45. ( r, o4 i5 O# C3 d* j
    46. public   class  CreateXLS {   
    47. \\" P/ M2 W7 R0 X  }
    48.     public   static   void  main(String args[])   {   ; E. Y  t\\" R2 U* o+ ?3 O4 ?
    49.         try    {   
    50. . T/ U' e: i2 j7 f0 q
    51.             //  打开文件   
    52. * _% f0 M\\" I0 p+ ~% e) |
    53.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));     [/ A; `- t% U\\" N
    54.             //  生成名为“第一页”的工作表,参数0表示这是第一页    ' f& N\\" n: {* M, r+ K4 Y
    55.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    56. $ }+ ~7 s% G: i\\" d% W- j# d9 [9 E\\" s
    57.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   4 U# r\\" G3 Q) {' V
    58.             //  以及单元格内容为test   
    59. 6 j. {+ b, M6 n
    60.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    61. ( ]4 ~& h1 U8 K2 Q5 z6 g( f$ k# {
    62.   
    63. ; l& Y% h: m% A! `# J* r
    64.             //  将定义好的单元格添加到工作表中    * s+ }) t6 v, N) @0 ~9 U+ C! [
    65.             sheet.addCell(label);   
    66. \\" {# T' q$ b3 c  s, _* ^
    67.   
    68. \\" }2 U  L% r+ }
    69.             //  写入数据并关闭文件   
    70. . L4 A8 v/ W  M2 [2 v! |; v% J$ p$ k
    71.             book.write();   
    72. : L- p5 x  n8 u
    73.            book.close();   * e5 @7 j7 H- T. T6 K. H
    74.   7 D- l- K/ @* d3 P0 g
    75.        }   catch  (Exception e)   {   3 c$ M7 f7 N6 X$ E* M' U8 u$ C
    76.            System.out.println(e);     Q- O6 x% q2 ~% m! E  r- Y) T
    77.        }    . t1 h2 L; H0 @
    78.    }   
    79. # F) b/ }6 E( [4 C0 |
    80. }   \\" F7 V) X, s1 r- X. W

    81. 1 y, y, C+ M( l% ]2 N$ u+ T, d

    82. 2 \9 M1 d) L$ b\\" N

    83. 1 W: P% [- c, G! ^2 {3 I$ ~
    84. (2)读Excel文件
    85. ) z! z! ~4 }6 H% h  c# I4 d

    86. ( y, ?, c! N) s$ a* S5 c% I0 D
    87. 0 O- O  Y  ?% u\\" p8 N8 R
    88. package readxls;
    89. ( O( d7 j0 J3 S& y- ?

    90. 2 u# u8 b* h% ~7 Q. L: q2 Z
    91. //读取Excel的类   
    92. \\" N$ o( R8 e1 Q7 i8 G+ W
    93. import  java.io.File;   
    94. 7 x) o# \1 G# E. y
    95.   - ^- B- u. Z' P8 ^! V' n' [# ~/ J9 d\\" z
    96. import  jxl.Cell;   
    97. 7 c. {  ]' K9 r/ P7 A# t
    98. import  jxl.Sheet;   4 R: z3 S9 p3 Z
    99. import  jxl.Workbook;   ; d% Y2 C$ H/ ^( d# ^4 Z  m7 N
    100.   # @% j/ P& c! }
    101. public   class  ReadXLS   {   / [4 O3 Y3 o5 U' g
    102.     public   static   void  main(String args[])   {   2 b  Q7 M  H7 C) _4 X
    103.         try    {   % v1 R# m7 p$ ]# q0 h. Q: Q& y$ d
    104.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   
    105. : D+ n& u* y: K+ x& f/ V
    106.             //  获得第一个工作表对象   
    107. 7 I( Q& l) E\\" w
    108.             Sheet sheet  =  book.getSheet( 0 );   
    109.   v+ t7 C8 j  [3 [
    110.             //  得到第一列第一行的单元格   
    111. , o8 ~7 r- j7 c2 a+ Z  n7 j
    112.             Cell cell1  =  sheet.getCell( 0 ,  0 );   3 ?( [/ o: w+ v* D
    113.            String result  =  cell1.getContents();   ; R( ?* B0 j: v# F+ ~( ]
    114.            System.out.println(result);   1 R, |& C4 Z3 I0 V\\" M\\" c
    115.            book.close();   6 @0 B' H7 {\\" @' I( Q# c
    116.        }   catch  (Exception e)   {   2 M/ t! F5 j. F9 s
    117.            //System.out.println(e);   
    118. . f' S/ o6 ~, l- ?: i1 V2 n
    119.         e.printStackTrace();) q! i$ F: p/ C2 L' ~
    120.        }    * F  F* f( M4 q3 \* y; k\\" n# {
    121.     }   
    122. 6 |+ Z2 u+ V( C0 K+ H) W
    123. }
    124. ( |* k( n1 s) s2 J

    125. 2 d$ }5 H2 w9 b( F
    126. ) m; G! o6 d* x\\" `3 M
    127. 0 J: L! e6 i: X! ~

    128. * {2 C$ l  O! X/ y! V; _& |/ c( A
    129. (3)合并单元格、格式化单元格等
    130. : N\\" l3 t/ \! a0 w- z8 G3 a

    131. & X8 ?0 F9 l$ ]5 P( U% t/ p

    132. ; z, X- ?2 O2 R. D) `0 |, L7 x5 z
    133. //合并单元格并在单元格中输入内容8 l# H8 c6 h\\" {9 g$ `7 }

    134. 3 s2 N; c\\" v5 e
    135. package additionalproperty;
    136. + ?! _+ A( Y* F

    137. 8 B% w# U6 c8 n5 C6 p+ a* b
    138. import java.io.*;
    139. 4 N, w! }' Q: D. Y8 y- F8 q
    140. import jxl.write.*;
    141. 9 h  r% d9 G: ]\\" w; \& ^5 ^3 y
    142. import jxl.*;' h7 T& e  S5 _6 d

    143. : z8 Y% w. C$ {# ?! u. w6 p/ c0 g
    144. public class MergeCells {$ v- ]- S( ~- R* ^2 D- f% h
    145. public static void main(String [] args){: s- w\\" r3 E1 b. p/ u3 x
    146.   try{2 ]% x/ ?! W3 l2 T) T% x* {& H
    147.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    148. 2 h8 W0 q$ i5 |
    149.         WritableSheet sheet = book.createSheet("第一页", 0);
    150. ) n' S) O. l% P& t! p: j
    151.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    152. ) O! R, t3 U! A+ m
    153.    \\" L, N4 f: g% V( m0 z
    154.         //设置填充内容的格式
    155. # P9 C$ B\\" c/ k1 L3 o) \) u: ]+ k
    156.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
    157. \\" U7 t, |) D9 p, K# E6 I
    158.         WritableCellFormat format = new WritableCellFormat(font);6 s( y\\" K5 o& H$ K
    159.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中& V# t. O' G$ `
    160.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中- _) `5 l0 R/ f- ~0 a\\" x9 U
    161.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式* Q( m5 p4 I: s2 Y; D/ c
    162.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式
    163. + ~. i6 E& u- e/ P8 ~\\" i; M' u
    164.    
    165.   x  m  ^5 ~0 V# p
    166.         Label label = new Label(3, 3, "合并", format); //添加内容
    167. 7 J8 ^  m1 \- e& H+ Z, J
    168.         sheet.addCell(label);
    169. \\" a, U7 t: ~+ w; |, c4 O
    170.         book.write();
    171. ( U! Z8 y3 |( H; l
    172.         book.close();
    173. . i) l6 d6 z+ ~, W6 q& w
    174.   }//end try* ~) q9 \( I3 t! u& t# J\\" A; k
    175.       catch (Exception e){: y6 ?9 J0 g- S$ p/ ~4 E* d
    176.            e.printStackTrace();
    177. 7 P% S# Q) I  r$ r- u) \  I
    178.        }
    179. 7 [7 [\\" e4 ~- f( Q- l, q% H% `, k7 c
    180.    }
    181. 5 t2 E, p# o$ P) p/ ~' s( p& s( |+ D
    182. }
    183.   w6 z: F- ~3 J+ e, F

    184. 0 ?2 ~: K5 W' |9 z% P
    185. * r2 K' J4 k! z0 D

    186. ( G8 N! t& x) d
    187. (4)添加图片+ G6 b0 a0 |, X, v; ^' Q

    188. ' y3 Y6 A4 Z% ~$ U; b
    189.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    190. # P& Y1 U/ L, `8 p) N3 x
    191. 5 ^( U6 B8 L3 A0 y
    192. 8 Q* V0 i5 h9 V/ I7 i8 n
    193. //在工作表中添加图片5 r; b$ Y; S; t

    194. \\" {5 A0 @% }0 x: {4 I
    195. package handleimage;
    196. # ^* x# y) Z' m, z! G
    197. 7 G! ?; X2 K) [. s$ q' f% i* o
    198. import java.io.*;
    199. 0 M1 p. `* {5 Q% B3 f
    200. import jxl.*;
    201. 9 R. J0 O- d/ E* k0 {\\" b
    202. import jxl.write.*;3 E9 q4 @7 J) }' ?: d# [; Q5 D: U
    203. # z\\" V- u# j! F& k$ p6 R
    204. public class CreateImage {
    205. 5 q( @9 u6 P3 a0 z* O
    206. public static void main(String [] args){
    207. 3 B- [0 l: Q$ w8 U
    208.   try{
    209. ' z7 |1 e1 w- J3 t/ }6 W
    210.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));8 o$ d) \# r, {
    211.        WritableSheet sheet = book.createSheet("第一页", 0);
    212. ' H4 q: C1 A$ V% [% z
    213.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    214. 9 \% ]) G. K9 J# U/ k! t' }- m
    215.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    216. # b% F- `0 ~\\" Y: H3 C) Y
    217.        sheet.addImage(image);  //添加图片
    218.   e/ w5 X7 K5 {4 @' n
    219.    
    220. $ p4 C6 f( d6 h
    221.        book.write();$ W6 F% ~* r3 S4 w, Q  u3 a
    222.        book.close();! K0 W9 s3 ?7 E. E# V. T9 y
    223.       }//end try% B  B% o% P7 R; G
    224.       catch (Exception e){ e.printStackTrace(); }: }5 H& i5 `, R\\" I2 h0 b
    225.    }
    226. 9 F8 e: j+ h\\" E
    227. }
    228. + q4 v' K3 T4 M2 I
    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:34 , Processed in 0.410914 second(s), 59 queries .

    回顶部