QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2350|回复: 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的使用方法。
    2. ' |8 R. p, v; G8 g1 n
    3. $ N8 t1 w) ?2 y\\" l\\" C+ L
    4.         1、环境配置
    5. * I7 R! T' h8 V, I, p8 E
    6. ! i* N\\" Y3 J$ g% F* m+ ]- X; H
    7.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    8. 1 P& E7 ]3 s' ?0 ^& V* M0 s* p
    9. 0 i' i* S1 n\\" ]5 r# C8 [. X+ E
    10.         下载完成的包解压之后,可以得到如下几个重要的文件:
    11. % l\\" p! w2 d  c$ C* j' N$ C

    12. 3 Y& I3 K# M% o9 O- P
    13.        (1)jxl.jar  —— JExcelAPI 函数库;
    14. 6 E- l% i\\" Z% p# M! m

    15. \\" U5 J* Y6 s2 C( d* ]
    16.        (2)docs  ——  帮助文档;* G9 m( V5 T. Z7 K1 j
    17. 1 J& v+ N( J0 X' s* w5 c- s8 [
    18.        (3)src     ——  源码文件夹;
    19.   I/ }( d, w9 g4 j. v0 c

    20. 5 v9 a' B' _0 B- B
    21.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    22. 6 b4 v# c) c( |' I+ b( x\\" i( N
    23. + `4 q, z' U+ \8 F, x9 F; R, \( f, [
    24.         2、Excel基础操作实例
    25. ' T) q  L0 h4 m$ u3 S) A/ T

    26. - F) e( k$ c4 j& m6 R/ H
    27.         (1)  创建Excel文件    ; h/ ]. a4 B) T; @; A4 }5 D6 W! m
    28. 2 d4 X2 v/ f3 T6 X( c1 J2 L( h
    29.   /**读取Excel文件的内容   3 l+ v* h% O7 U3 W. f& G
    30. * @param file  待读取的文件   $ b' ^. |. w$ U5 W
    31. * @return   // 生成Excel的类    */
    32. 7 q% z* ~2 l! ^\\" T: R% d0 t
    33. package createxls;8 u  u6 w2 m' T5 L8 {

    34. 9 D  o9 ^; J8 v2 _\\" l6 x
    35. import  java.io.File;   7 h0 d4 {0 m& E; k1 ^/ n% {7 G
    36.   
    37.   v; a+ A2 a- k' v7 b
    38. import  jxl.Workbook;   
    39. ) x! e$ }$ }  F& H! C( {
    40. import  jxl.write.Label;   ! G' [8 Z. w3 \
    41. import  jxl.write.WritableSheet;   7 J2 L6 U; C& u: _
    42. import  jxl.write.WritableWorkbook;   
    43. * D3 i$ ~1 K+ R% P9 K+ }
    44.   8 _8 @* L% o, K: `! E5 f* P
    45. public   class  CreateXLS {   ) g7 p+ ?- \( h\\" @: o+ ^: C
    46.     public   static   void  main(String args[])   {   & K- X: [' v( n
    47.         try    {   
    48. ( l/ P8 D\\" I3 [% [4 U/ o5 F
    49.             //  打开文件   
    50. & ^' A2 K4 P# B5 P
    51.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   0 Z5 r4 y2 p. T/ }' C+ G
    52.             //  生成名为“第一页”的工作表,参数0表示这是第一页   
    53. + X: s& }$ K! `, H, i8 W! a
    54.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    55. & q1 J% k2 U: o: N% B, B
    56.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   * `- h- ^5 f. v0 ~\\" u; `, z2 C
    57.             //  以及单元格内容为test    : h. h9 l) H. x# X
    58.             Label label  =   new  Label( 0 ,  0 ,  " test " );   & x* @1 t4 ~. t\\" i0 a4 T
    59.   & A5 v8 m+ Y$ S/ {( I0 o
    60.             //  将定义好的单元格添加到工作表中    % K# K! w\\" W# Q) E
    61.             sheet.addCell(label);   - \3 L( U5 Q( N  i
    62.   $ Y  `' @9 p( W/ x* `' @. l% f4 ~
    63.             //  写入数据并关闭文件   
    64. + X& a4 v4 T- x\\" K' Q) `. U1 P' z8 P
    65.             book.write();   & C+ }9 d9 D: M( G8 W5 {+ g, Q
    66.            book.close();   0 g7 v5 z\\" o. V/ X0 _' D
    67.   1 H  d; Z3 o  y4 `0 \5 D
    68.        }   catch  (Exception e)   {   0 Z% }, z$ R  B; g0 T- a* H
    69.            System.out.println(e);   ) R) v! h! U; W1 `' {3 m' C2 Y  M
    70.        }   
    71. & F6 R' Y5 x5 P$ ^+ i
    72.    }   
    73.   F8 ]# Q( y! v& Y2 B' }! y: q\\" H
    74. }   
    75. 3 k! ?' c) b' `5 m. z8 Y

    76. 3 A% J$ Q% Q8 W
    77. 7 z) y5 j5 c. o; B. o
    78. 0 L' t; a4 m, @/ W9 q$ m
    79. (2)读Excel文件6 U/ y8 W/ v9 l

    80. : s9 X* o) `; m

    81. \\" l9 G7 z% w4 t3 |' E
    82. package readxls;
    83. 4 w8 X$ ~3 ^0 T

    84.   _! p! g( ~, k+ m  \6 H
    85. //读取Excel的类    ; x- {- l' P0 E\\" c) F! o' I8 O
    86. import  java.io.File;   
    87. , N6 _. ~- F9 k\\" i. S5 v3 X
    88.   
    89. $ e/ {; r4 i\\" p# x
    90. import  jxl.Cell;   
    91. 1 ?4 M$ |1 a9 h# l/ `( E
    92. import  jxl.Sheet;   
    93. - H. C6 D' A% R: G1 D+ T\\" S; Z8 a
    94. import  jxl.Workbook;   
    95. 1 P, L* Z0 @% Q5 l\\" z* m* l
    96.   $ T9 o& h- e# K7 Y
    97. public   class  ReadXLS   {   . p8 w  Q; ]$ c; Y
    98.     public   static   void  main(String args[])   {   0 Q5 i! H% Q' \# r, C1 R% C2 r
    99.         try    {   
    100. # e% z3 E. c, L1 C- Z5 l+ z
    101.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   . G2 V. M4 t) D1 v+ s4 A& D
    102.             //  获得第一个工作表对象    + D- f% ^( Y6 A) t( }
    103.             Sheet sheet  =  book.getSheet( 0 );   1 s) i& [) h; H* a5 T
    104.             //  得到第一列第一行的单元格   
    105. / o$ Y/ o4 _( ]' Y  N2 j8 G. Q
    106.             Cell cell1  =  sheet.getCell( 0 ,  0 );   & m0 [. s- T' [: ?9 u
    107.            String result  =  cell1.getContents();   7 a. H. f# e+ c3 s# b, N$ f
    108.            System.out.println(result);   0 e7 E  z; c; Q3 U& x' E% x
    109.            book.close();   
    110. ; z4 M! Q- @) t% o; D% V5 t
    111.        }   catch  (Exception e)   {   
    112. 8 m; n  \0 F2 x3 B7 N/ D
    113.            //System.out.println(e);   $ G; o3 H& g' X. L( [$ K
    114.         e.printStackTrace();
    115. 4 \  M3 V0 e0 t+ Q) G
    116.        }    & F5 l+ T8 I; i4 H7 O
    117.     }    * m5 E6 m1 t7 D/ u% h+ u8 Q, a
    118. }
    119. # v; _* l1 v# u

    120. 2 M; N- C1 l* K$ D, |* U. Q

    121. # ]1 P/ x/ l\\" S  K- f5 K
    122. 4 r. i6 V& ?1 Q5 s' G, K0 D$ f4 C

    123. 6 I5 s0 @) a  L* C- q9 C) ~& n: N0 W( k
    124. (3)合并单元格、格式化单元格等& f+ p\\" x2 ^8 R3 o, ^3 S! }/ ~% W
    125. , U\\" K\\" w  a+ X$ V
    126. , W3 K\\" k  ^' b: o1 {
    127. //合并单元格并在单元格中输入内容# k( _8 D8 }$ @

    128. + D( }0 [* C7 a- z) @) V' `$ }
    129. package additionalproperty;
    130. + z5 \; P& A\\" v3 J# g* I
    131. # \/ w3 Y; |, [, d, n
    132. import java.io.*;  o) x. D* l! q  [+ P
    133. import jxl.write.*;, F9 i2 C4 f6 b) [
    134. import jxl.*;
    135. ! t4 a; j\\" y3 m+ [( B( c; d

    136. % x7 k( q\\" S% C$ w
    137. public class MergeCells {
    138. % a3 |9 R5 V. E5 Z* e
    139. public static void main(String [] args){, K. s# V' z3 Q\\" z, @  C\\" Q
    140.   try{& j  ^3 I+ I0 `: R/ J( I
    141.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));+ e+ m  O& \& [# l1 |7 J- i
    142.         WritableSheet sheet = book.createSheet("第一页", 0);
    143. 1 s1 ^  U( b5 b/ P8 C( O; a  r
    144.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    145. 5 R. q5 G! n7 V; _7 i+ `/ j$ [
    146.    , n' z) U( s; \+ C# v, t
    147.         //设置填充内容的格式1 p& N( a+ {3 m\\" O
    148.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
    149. 6 g& w# S$ A4 U1 g5 G7 i- G) H& v
    150.         WritableCellFormat format = new WritableCellFormat(font);
    151. 0 T* ?% Z( q5 v) K2 z* m
    152.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中
    153. 4 F5 J: [3 A) v3 q
    154.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中
    155. # ^- p6 g\\" K+ {6 S
    156.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    157. 9 o3 g8 B+ X2 E) L3 i' t5 ?& }7 a
    158.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式- V6 B% ]5 H4 t  B- P( Q9 t( V
    159.    % p3 W# s' u/ `
    160.         Label label = new Label(3, 3, "合并", format); //添加内容
    161. 2 D% Y0 w\\" E7 H4 {& N4 S* G
    162.         sheet.addCell(label);& h\\" r0 O+ y+ U9 W
    163.         book.write();
    164. 0 U4 N$ {% e; K; l9 v1 ]3 {
    165.         book.close();, l0 L9 M: Y1 `! v
    166.   }//end try$ J9 e( Q* w. q' p2 B, i, x
    167.       catch (Exception e){
    168.   G0 g1 P* R/ @# Z$ K  _  |7 ]
    169.            e.printStackTrace();& [0 H/ ~  h1 r
    170.        }
    171. % X3 o4 R! [& b' b0 Z/ r
    172.    }
    173. & i; j* l5 ?  F# M& b! G. i$ W% |
    174. }
    175. 4 e* I, K+ p3 E. ?% g2 x$ U

    176. , [, x% A  V* _0 F; p

    177. $ {% [* j# h4 _: l% w
    178. \\" x: d) `! ~. s; U0 ]- g
    179. (4)添加图片. r/ H- e7 ]' ^& @% n
    180. $ ~3 A\\" J- Q/ \! S- Q
    181.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。7 E; h. K5 ^9 u9 z7 j  A

    182. & W3 _( }/ u2 a9 F* ^$ X* Y2 K

    183. - C) z& F; @, x2 d5 c* O
    184. //在工作表中添加图片5 l4 @. Q  `; U% R
    185. 8 I& U! \4 U( Z8 s! [- O# f* [4 p
    186. package handleimage;& d* E$ ?- E5 t% r; r

    187. ; ?5 r6 u; g% L
    188. import java.io.*;
    189. : n6 _3 ~9 e7 _4 ]
    190. import jxl.*;- g7 f0 F! B* M* G2 e$ ^7 o
    191. import jxl.write.*;
    192. - K1 k6 \$ d% ], c* n' s

    193. 2 E2 o* @# d0 V5 v2 F4 E
    194. public class CreateImage {
    195. 1 p% p. o9 ]3 Q+ _$ ?
    196. public static void main(String [] args){
    197. ; j\\" m5 R3 f0 _6 @. V
    198.   try{
    199. - n* m- L7 L4 W8 O$ U& [
    200.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));; f) b# ^3 y8 l/ N; o0 c8 |+ R' j
    201.        WritableSheet sheet = book.createSheet("第一页", 0);
    202. 9 @/ J/ b4 f; u% o) @
    203.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    204. / v3 n' s9 h/ i) s. C2 P
    205.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));% A) s4 ~9 K3 v2 H. V# O. {
    206.        sheet.addImage(image);  //添加图片1 K6 I, o4 j0 @4 d/ l; z% x
    207.    0 ^: i. C! [5 C% W
    208.        book.write();6 b5 l1 a0 Y6 |
    209.        book.close();7 o. ]6 `4 D; \1 n
    210.       }//end try* E, N2 Y: X' G% x# V
    211.       catch (Exception e){ e.printStackTrace(); }\\" [5 A) t* ?% l
    212.    }/ g4 b5 j. X8 Y9 B$ g* s4 S* P; @, m
    213. }
    214. * {5 S( r' w4 n! l- T
    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-1-11 08:29 , Processed in 2.725779 second(s), 66 queries .

    回顶部