QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2107|回复: 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. , v: f3 Z! j# q* U# ]* \, u

    3. $ W  K/ ], l% @* P
    4.         1、环境配置0 Q) @/ {8 S' w( @  V# z
    5. & i0 p& H2 X5 Q+ V% [
    6.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    7. 7 m3 D9 [8 Y# S2 {9 S4 y; z2 D
    8.   o2 l& n' ?1 p, Y
    9.         下载完成的包解压之后,可以得到如下几个重要的文件:8 M; b$ Y+ M/ Y/ l

    10.   l9 {; h+ b2 H8 o* M\\" E  e
    11.        (1)jxl.jar  —— JExcelAPI 函数库;- o' K, `& g4 t9 L3 `; p

    12. % t1 F- N/ S% {, L; t' k2 L
    13.        (2)docs  ——  帮助文档;6 g) E# o$ y! p3 H$ a

    14. 1 ^- M: e4 g& ~4 I
    15.        (3)src     ——  源码文件夹;  m+ f  e' O5 \3 [' ]' M4 g3 R

    16. 5 n7 _  h2 n\\" {* d
    17.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    18.   v0 V( h, S+ \  J& x
    19. : Z  H2 g; J( B% T: |
    20.         2、Excel基础操作实例
    21. 3 k; g; R\\" T  g7 b9 ~8 `
    22. ! I, W% }) S5 [' k\\" l. }4 y
    23.         (1)  创建Excel文件    $ s% ]* t8 C3 q( i
    24. * m\\" Y! s  x/ V# V; O
    25.   /**读取Excel文件的内容   
    26. + [, L$ m$ U\\" F9 C
    27. * @param file  待读取的文件   
    28. % \3 Q6 Q9 \% \
    29. * @return   // 生成Excel的类    */
    30. $ x8 V. @! w# j# u+ x0 X6 b' f) W
    31. package createxls;9 W3 z\\" G6 e7 z& W7 a# J
    32. 9 f* F8 _# e# I  O* x
    33. import  java.io.File;   \\" U/ `. s$ G4 a
    34.   \\" J  W$ s6 C* v* g' q\\" V* i$ S5 v
    35. import  jxl.Workbook;   
    36. 2 x3 c) ?3 m( m+ G/ }\\" B
    37. import  jxl.write.Label;   7 @: D6 @7 l, a2 y. Q. K! w- }
    38. import  jxl.write.WritableSheet;   1 R) a2 u0 _  ]) o2 i0 g
    39. import  jxl.write.WritableWorkbook;   : Z- Q4 x  ^/ n/ z2 y/ p
    40.   
    41. 0 O5 _% l% U( y7 m  ?7 o
    42. public   class  CreateXLS {     Y0 I: H6 X: N$ B, w2 y* b
    43.     public   static   void  main(String args[])   {   
    44. 7 [' I6 q- @- m- x: H
    45.         try    {   + d; {+ K( @& _$ q+ M
    46.             //  打开文件   
    47. 3 W* s$ @+ V4 p; K4 {, Z
    48.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   
    49. 8 j. h\\" S5 ?4 B9 w
    50.             //  生成名为“第一页”的工作表,参数0表示这是第一页    0 T5 h) |1 J0 }; U\\" T1 i- H
    51.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    52. 0 e! T/ g) G! _+ ^( W8 m
    53.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    54.   V# _4 F/ l3 m% @\\" P0 C
    55.             //  以及单元格内容为test   
    56. 7 h. b* n! _7 v
    57.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    58. + a3 |& b' o+ y  ~  \  D! g$ r
    59.   & A  g) \\\" U# R0 `1 |
    60.             //  将定义好的单元格添加到工作表中    9 Y! |0 @/ V  V
    61.             sheet.addCell(label);   
    62. 7 B( I' C+ u, ^) n
    63.   
    64. ; {+ [+ w8 u' v7 w\\" A
    65.             //  写入数据并关闭文件   
    66. ; [) e, p  |$ J5 s( {. U% S4 F! \
    67.             book.write();   
    68. - r6 i: \3 {' `/ }7 C. V
    69.            book.close();   
    70. + t$ r# A1 D* w/ c) Z
    71.   / a; ^9 a$ i( c$ m
    72.        }   catch  (Exception e)   {   8 K3 t! L9 r, m0 I7 d$ U& I; W
    73.            System.out.println(e);   
    74. ) z7 x. K* }! J' J+ _4 k( j# n
    75.        }    5 U5 X* Q$ P9 g\\" w
    76.    }    ' Z2 b( v; G' o5 n* G
    77. }   
    78. \\" B9 W; |: ^2 U; d6 ?% B% X. D

    79. ! ~0 f# P) @- P' N7 W0 R
    80. 1 h+ _* l\\" G7 c( {% H2 k

    81. $ a  ]8 b( ]3 K* W9 p( S6 H/ C! S$ O
    82. (2)读Excel文件6 t9 M0 |) v1 M( S, R' }% s9 C
    83. ! h! ]/ ~( N, x0 x
    84.   }: [5 P( s. |& B\\" j9 O! J
    85. package readxls;
    86. ! b  T* n  D* S! W8 F9 ~4 [

    87. + F' S\\" N5 x4 `8 F+ \1 ]/ U
    88. //读取Excel的类    ; W- F, d0 E& V1 i: u2 G1 v
    89. import  java.io.File;   
    90. * |; L5 p) U6 |* c5 P' ?  `
    91.   
    92. ' T' }+ q& s* |6 m' \
    93. import  jxl.Cell;   
    94. * {+ p5 N9 y( }+ J. _
    95. import  jxl.Sheet;   ! B# W' n3 Z1 |
    96. import  jxl.Workbook;   
    97. , o, G- X! |! D$ d* \
    98.   
    99. \\" _$ _1 O+ ]; K) x/ b
    100. public   class  ReadXLS   {   ' f% u5 c0 a\\" g; z, C$ Q. F8 ]
    101.     public   static   void  main(String args[])   {   
    102. % e  x1 B/ [) J4 q! j
    103.         try    {   / M7 P/ m& |) i4 [! x
    104.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   
    105. ' O8 H, `/ d2 w3 ^6 q- r
    106.             //  获得第一个工作表对象    9 |4 l2 N, V: ~3 m
    107.             Sheet sheet  =  book.getSheet( 0 );   1 Y2 ^/ t: t7 s' }' }
    108.             //  得到第一列第一行的单元格    . ]( d5 |; M: f0 B) Z
    109.             Cell cell1  =  sheet.getCell( 0 ,  0 );   ; m6 V- j6 f% K2 [8 q9 H' n- r/ _
    110.            String result  =  cell1.getContents();   1 }0 x& \& x7 |. i! }7 @
    111.            System.out.println(result);   
    112. 4 l$ Z4 w  f1 r8 g. X+ H% k
    113.            book.close();   9 ?3 ]: k8 c1 y# k- d' [\\" X: u
    114.        }   catch  (Exception e)   {   
    115.   S0 E. t9 H1 p* x; z
    116.            //System.out.println(e);   0 [9 ?\\" ]6 {' R0 _' b( |  f) K\\" A
    117.         e.printStackTrace();5 C\\" f5 @9 @: H9 U4 n
    118.        }   
    119. ) Q( I3 y2 ?) ]3 B, Y% {% h
    120.     }    & p% l( f2 ?  p9 R& G5 f* Y\\" M
    121. }
    122. - ^8 `0 Q% {3 u) ~% B, Z\\" K
    123. 7 E2 |, {# [% e- Y: q\\" V8 u\\" X

    124. ' Y0 |% N! H. S: m% X' z# d
    125. ; i9 v0 X$ t: f: H\\" {
    126.   z2 e- S' y1 ^) ~
    127. (3)合并单元格、格式化单元格等
    128. # ~\\" I9 `$ r' p6 [: }( u$ ?
    129. \\" I2 J1 z1 }* ?+ j

    130. # Y9 @/ N1 V2 W
    131. //合并单元格并在单元格中输入内容
    132. 0 k1 y2 r\\" `: U6 q: P

    133. : p' g\\" c4 }% r; D! A\\" L) g
    134. package additionalproperty;0 V\\" o+ X; s\\" Y9 o: o2 n\\" c& f+ i0 h
    135. . U- \3 i0 n5 {' D
    136. import java.io.*;+ t9 k6 e$ _7 J, R3 S: d5 y
    137. import jxl.write.*;- L6 ?: v$ }; O* G  l( B2 k
    138. import jxl.*;3 }! a1 [9 x- A7 g\\" ~. y
    139. \\" \; F8 P8 D$ f* f
    140. public class MergeCells {2 [3 `8 y0 T  h6 w+ S
    141. public static void main(String [] args){( V, F/ c! c2 m/ J
    142.   try{( m\\" f\\" P! t1 ?8 C$ W8 r# o! ]
    143.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));0 K7 ?* u* T  a1 w
    144.         WritableSheet sheet = book.createSheet("第一页", 0);- W; N/ P: @6 [9 r8 @
    145.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    146. + A. l% S! a3 g3 A3 ~8 j\\" C
    147.    
    148. / |2 h\\" N0 P, j
    149.         //设置填充内容的格式' c& k8 B9 a. j
    150.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);6 _, x5 ?0 I! n* b3 [
    151.         WritableCellFormat format = new WritableCellFormat(font);
    152. 9 c: v# b7 _3 B: Q* L
    153.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中6 W# U' P  u2 C
    154.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中
    155. # H. I# ]8 I; b, l9 |
    156.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    157. * W! b8 O% |/ t  P
    158.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式
    159. ' P, [' f8 s2 G: v- m! r- p: b# a
    160.      |4 Y& X9 b) @
    161.         Label label = new Label(3, 3, "合并", format); //添加内容! s7 o1 M4 ^1 R) {+ S* q
    162.         sheet.addCell(label);, o- R, \2 P  F5 J5 |& R. l( Z  V
    163.         book.write();2 E# ^: P\\" Y% X0 T( I+ D$ A
    164.         book.close();
    165. * A3 F( l' u\\" p1 K3 ^9 c5 P  P2 i9 ]: X
    166.   }//end try
    167. $ D4 C6 D2 q, y: ^\\" X0 p- W) V
    168.       catch (Exception e){' S* {6 g* B; E6 w( B
    169.            e.printStackTrace();
    170. ' |: n# ]/ A' D3 g1 x
    171.        }8 E4 E6 W) N! Z  Z& G# o
    172.    }
    173. * O0 y9 i/ D6 H7 c7 t
    174. }
    175. , b/ {$ f0 ~; H: d

    176. & |\\" d! V5 e. p! W# o, }
    177. 1 w. S9 [! \4 Y+ l+ m: Q6 y; X& r$ I
    178. 0 f1 f8 _, F, u; `% Z
    179. (4)添加图片
    180. 9 p; ^2 Y* w. Y9 w! W4 u
    181. - K$ r4 ^: W$ A$ |* r/ p  _- L
    182.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    183. 9 q1 N/ z2 R% F3 v( {/ r

    184. 0 d, z2 B! i; X. X8 q- H7 K* ~  S
    185. . h7 P- X, Q( l1 I
    186. //在工作表中添加图片
    187. ! S. A/ G+ D! I$ T1 i# A+ f

    188. 5 |) W$ Y) W% X7 P
    189. package handleimage;
    190. 7 p  J* l\\" {% m+ J6 J

    191. \\" ~. T8 s2 W9 B
    192. import java.io.*;( f: U' L3 I# z2 X/ K+ R
    193. import jxl.*;
    194. ) [  t9 ?2 {% o, t( k1 B& J! `8 s
    195. import jxl.write.*;! n$ U1 ?  z5 ~& p0 L. s* N# O* L

    196. $ G8 l$ `0 c) Y
    197. public class CreateImage {
    198. 9 ~; j; Q6 H5 s0 t& v9 m+ X
    199. public static void main(String [] args){
    200. * K2 G/ y, B$ ^. e/ r
    201.   try{: d( ?4 X, V+ @- L8 n
    202.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    203. 8 z6 t2 t4 M! Q( d$ X
    204.        WritableSheet sheet = book.createSheet("第一页", 0);
    205. 6 u( D  C$ ^! c
    206.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式; L: I! `6 j' E4 b; s0 ~
    207.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));; [- Y\\" \. {8 u6 B. ?. n
    208.        sheet.addImage(image);  //添加图片
    209. + o: ~6 @4 @7 p\\" {\\" j+ x4 u
    210.    
    211. 1 c: W: H3 Y+ o8 c( J9 N' [. K
    212.        book.write();
    213. 0 x! l' {: J( o4 A9 C; l$ b( G
    214.        book.close();
    215. 3 H( Y\\" G# q* g( q  D5 O\\" M9 `
    216.       }//end try
    217. 3 e, V\\" v( X, G: {1 m\\" r+ Z% N; b
    218.       catch (Exception e){ e.printStackTrace(); }
    219. 7 R, I& t3 f: Y9 G+ s
    220.    }1 Y% f# Z5 h# G' f
    221. }
    222. $ X\\" y( W2 `  H
    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, 2025-7-22 00:58 , Processed in 1.907673 second(s), 60 queries .

    回顶部