QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2398|回复: 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的使用方法。: M: z2 Q# ?# l4 c4 P5 K! S! W

    2. ( H1 X6 T9 X8 R% V+ [& B. m
    3.         1、环境配置5 A& J: e' m' M% H  f# x5 |' Y
    4. * P: J7 H% n, W) x
    5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html: T6 s3 V# x! f( X* q) I% Q( e

    6. 8 T\\" \2 L8 B! `) u* P
    7.         下载完成的包解压之后,可以得到如下几个重要的文件:! G% w/ J\\" u; n/ n  x\\" H
    8. 4 a7 b3 H) S% Y6 m' j! @
    9.        (1)jxl.jar  —— JExcelAPI 函数库;$ J\\" u0 J) L( T
    10. \\" F! q0 g. o2 T
    11.        (2)docs  ——  帮助文档;% D) _! J/ C) x& y

    12. ! @$ `: {3 O4 f, t8 n
    13.        (3)src     ——  源码文件夹;
    14. 6 {6 [6 d7 b\\" R4 G- f
    15. 0 n* h- y' M\\" T( f# F- u3 o
    16.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    17. & h. Z/ B* F! D+ W9 H! w1 D
    18. ( b- @\\" C8 r' x! o1 V\\" b& q2 \
    19.         2、Excel基础操作实例
    20. 6 {! @1 h. n1 E8 {. m6 h) Q
    21. 0 u* D: D2 o! r% X8 @! m
    22.         (1)  创建Excel文件   
    23. $ s  a0 K8 q; U0 N
    24. 2 C: r0 b; }- t! ]
    25.   /**读取Excel文件的内容   ! ^# W6 r/ P, K4 e0 c, T0 }1 _
    26. * @param file  待读取的文件   
    27. 3 `: }0 e0 r: B8 O
    28. * @return   // 生成Excel的类    *// v' w0 z* v4 G
    29. package createxls;
    30. ( M+ p0 x' R( P) ]+ w

    31. . @# |. U/ w3 `' A! ?3 H\\" P
    32. import  java.io.File;   
    33. & ^- E+ C' n6 [* u  y( Y: r! j( D
    34.   3 A; ]! o/ x: k
    35. import  jxl.Workbook;   4 _( c' T& ^- k% n9 X( Z  s( u
    36. import  jxl.write.Label;   \\" T& u1 D; E  y5 _; i\\" y6 W
    37. import  jxl.write.WritableSheet;   * E: \! G9 \0 f/ |3 a- c: R' t$ q
    38. import  jxl.write.WritableWorkbook;   
    39. 9 ]6 Z+ t; u9 a
    40.   * E7 M$ `+ X; o  y- m6 C9 O
    41. public   class  CreateXLS {   
    42. ; c5 R  m* o) x5 l2 F7 V
    43.     public   static   void  main(String args[])   {   # h/ K3 t- v( a. q; r2 x$ G2 D
    44.         try    {   
    45. * Y( i0 e5 S; t5 g, F* j4 J3 W0 F
    46.             //  打开文件    ' T1 E2 b- ]( p0 a# ?7 y
    47.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   
    48. + J6 V9 ~8 P0 Q6 Q2 A: q3 U9 P3 d
    49.             //  生成名为“第一页”的工作表,参数0表示这是第一页   
    50. $ S- b7 H& f8 D7 ?: ?. E
    51.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    52. 0 W3 u' k5 F\\" o, s/ E
    53.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    54. \\" h: a% r! J: q( {% @! `. u; v
    55.             //  以及单元格内容为test      Y6 @# V\\" |# C6 `
    56.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    57. 9 Q  |0 X' v9 L. {+ `$ F( l
    58.   
    59. ; {\\" a2 Y7 Y2 N: Q4 {6 b. j6 f
    60.             //  将定义好的单元格添加到工作表中    6 V\\" Y# S+ i9 S' u- u1 T\\" A
    61.             sheet.addCell(label);   
    62. . ^- k\\" z7 a, o: m2 m9 \( Q/ W
    63.   
    64. 9 ?  P3 z1 `3 t% m' Y, h+ ?
    65.             //  写入数据并关闭文件   
    66. : g! W\\" x. s4 O1 W
    67.             book.write();   
    68. 6 H1 h1 n& S9 G3 u6 ~5 s: N
    69.            book.close();   3 ^. m; o$ u! P6 f
    70.   
    71. 0 V8 L4 w' K( N0 T\\" n9 g/ M
    72.        }   catch  (Exception e)   {   
    73. % u$ R4 F- M/ F+ Q5 L6 ]2 t9 o  W, z+ {9 }7 w
    74.            System.out.println(e);   
    75. ; R9 k; o- F% ?3 k( W
    76.        }   
    77.   d3 D0 Z& X0 n+ `\\" h
    78.    }    0 H3 I$ @+ W' _: C+ f4 j
    79. }   
    80. 4 p( x$ v1 M& w4 j2 |

    81. - p! C\\" l0 l$ F' g
    82. 2 l/ s5 A- X3 u' C3 F

    83. 2 D6 i8 ]2 v: G' F# a  V
    84. (2)读Excel文件
    85. - Q\\" z. f, t$ p) i- F

    86. + x- b' g' u* D# \) i
    87. + u; d6 F; N. k% @
    88. package readxls;2 ]* Y2 F3 w3 q  l% C
    89. ) {# A. o% e\\" R' l# y! M
    90. //读取Excel的类   
    91. $ W7 @\\" `  _- Z7 ~! S
    92. import  java.io.File;   ! U$ E( u+ i- Q: R5 f  Q+ F
    93.   
    94. $ z2 y4 Y( d\\" Q. o* x
    95. import  jxl.Cell;   
    96. - c& ^7 t. x8 C5 L. P$ X. i0 X) t7 U* Z
    97. import  jxl.Sheet;   0 e1 i$ w) [2 b6 Q
    98. import  jxl.Workbook;   
    99. ! M4 ]: ~3 u( o: X+ J
    100.   9 _! g: t& X: m- m' M5 a* t
    101. public   class  ReadXLS   {   
    102. + e* {% o3 i7 [1 }  A6 ?
    103.     public   static   void  main(String args[])   {   
    104. 8 o6 N& G0 J  h7 D
    105.         try    {   ; ^\\" V: [+ W+ |1 R% w
    106.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   1 W6 n4 o* B( S4 m
    107.             //  获得第一个工作表对象    2 c7 p3 X( M( E/ X& k1 T
    108.             Sheet sheet  =  book.getSheet( 0 );   * q4 g) G3 Q$ m* X5 x
    109.             //  得到第一列第一行的单元格    1 Q7 O$ I$ `* u& l- x9 K( _4 U
    110.             Cell cell1  =  sheet.getCell( 0 ,  0 );     f# ~& g, V0 G
    111.            String result  =  cell1.getContents();   
    112. $ i& p) v( N( j1 A/ S: }
    113.            System.out.println(result);   
    114. % b9 B( h7 K$ Q4 Z. Q& b5 K
    115.            book.close();   8 o& q# l& c: |/ ?( W+ j% I
    116.        }   catch  (Exception e)   {   . I* V+ x, K' c% o
    117.            //System.out.println(e);   ; P. Y& K3 b' ?& ]* h
    118.         e.printStackTrace();
    119. & D, y' I\\" i- b/ _; L: j
    120.        }    9 c6 e8 Q/ \% W5 Z
    121.     }    $ @9 B7 q( A3 z
    122. }- Z7 \5 u& w0 p' W- H
    123. ; m- u9 f. P0 N( \! ]! l, t4 D

    124. 2 W! z; g$ m% a& U

    125. ( ~- @( G% Y3 [4 S! _7 y

    126. # {$ J) O1 @/ }  \
    127. (3)合并单元格、格式化单元格等7 [  ?& Y+ I3 I- d& y4 n  L

    128. - n+ a! i( K% s! h0 M

    129. 2 n+ E- d& x/ S8 h, {/ u. B. p4 w
    130. //合并单元格并在单元格中输入内容
    131. % d7 v4 V; Y* q7 L: M9 |( L( W
    132. 9 b! S' r7 h  I) Y
    133. package additionalproperty;
    134. 7 g; s/ n- ~; `# W+ D8 P+ u% D
    135. ! Q% Q  G6 H. d/ y4 H% T8 Q
    136. import java.io.*;
    137. ) H8 |. M9 n# w3 x, Y7 W: K/ u
    138. import jxl.write.*;
    139. \\" Y) x: d\\" O. @8 z7 F
    140. import jxl.*;
    141. $ a4 M: ?, U5 _\\" c  V
    142. \\" C) [& G, d! B) l! c
    143. public class MergeCells {
    144. 4 K9 ]: C) o2 P$ `/ O- \% g
    145. public static void main(String [] args){3 O0 y, H! ?% ]* o. q9 [+ }
    146.   try{8 ?6 d5 ]8 n/ w\\" d+ x* d  L( }
    147.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    148. ! f5 G1 q: _1 H* S6 q( w$ `
    149.         WritableSheet sheet = book.createSheet("第一页", 0);, A; u( K0 w' V2 ^5 Z
    150.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    151. - e0 R$ B5 s' V+ @; e2 g
    152.    3 d# u/ z: I4 k2 u
    153.         //设置填充内容的格式
    154. , N( D, C* s! J3 i' h6 Y
    155.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
    156. * G+ s- T7 ~& z9 F# ~
    157.         WritableCellFormat format = new WritableCellFormat(font);\\" c9 ^: L1 q1 c4 l+ E
    158.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中/ _3 G9 Y1 h+ j* P5 C4 W8 n  {5 V
    159.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中9 M& T, K# ?2 n\\" T) j
    160.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    161. - }( P$ W2 J1 R# O6 J
    162.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式4 f7 x3 k% y4 b+ I; m; ?
    163.    
    164. ( F- {! ]. j- a  [0 V
    165.         Label label = new Label(3, 3, "合并", format); //添加内容
    166. ( h3 t& D& Y* {1 x2 R  j
    167.         sheet.addCell(label);' y6 @& o. x( p* X2 V7 n
    168.         book.write();
    169. ) Q2 z2 w' i: S  K# I3 D
    170.         book.close();! l% g: y1 H6 w: k
    171.   }//end try
    172. ; h5 i( u0 {. C' ]5 [& T$ s\\" W# V
    173.       catch (Exception e){
    174. % D6 }% z# R\\" X) r  b. F# T
    175.            e.printStackTrace();
    176. , Q: {2 |) F& j1 d0 ]7 V) G
    177.        }$ C: `  K: p+ _2 k
    178.    }6 {; R9 P- z2 W) S+ R\\" R\\" ]6 C! `1 u
    179. }
    180.   p* a4 h6 a8 B2 I\\" C2 D
    181. , k% J+ n3 X6 L, Y5 N+ B. A) f# A

    182. 5 m% s% X3 d# r) k% c5 @\\" p
    183. \\" q, I6 B/ [) z6 U  I\\" z( s2 i
    184. (4)添加图片) I: z' B: S7 r5 k
    185. ) d  Y8 D8 X  u# R' r, w( N; B
    186.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    187. ! u  Y5 h' m# o% s  p2 v. w2 }' S

    188. . g7 h: F9 q# b  E% d1 F$ ]
    189. : ~0 I. S5 o' r3 `
    190. //在工作表中添加图片
    191. ) N  Y; c0 K9 l

    192. + n; e* z9 H3 U7 n! }
    193. package handleimage;
    194. 8 {: o8 H) x$ Y5 H8 m' D& X
    195. * Q$ X& H4 N* R$ z5 `; V. J# Q
    196. import java.io.*;
    197.   V) {* L8 |: S
    198. import jxl.*;
    199. 9 D\\" ?9 [4 e5 ^: ^\\" }2 V6 F7 m! L# B
    200. import jxl.write.*;
    201. 8 {7 ~: U* L, {0 V
    202. ; d0 W: `* ~  h% F\\" c
    203. public class CreateImage {
    204. ' K7 m* n0 d& _( a
    205. public static void main(String [] args){
    206. 1 g3 `, A1 D2 m' B# ]4 B  q+ B
    207.   try{! T- A4 H8 O\\" N3 B( Q, d$ p8 R  J
    208.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));: p+ V# w9 m! K4 C) w
    209.        WritableSheet sheet = book.createSheet("第一页", 0);
    210. & @9 f7 m, e7 R4 ]6 M
    211.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    212. 6 [\\" |* U$ y- y' n1 s2 ^% H2 y( ~
    213.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    214. \\" b+ e2 _  V) ^& v3 o  {
    215.        sheet.addImage(image);  //添加图片
    216. + N7 \1 ^\\" {\\" [! c9 H! ~
    217.    
    218. 8 c1 R) F& J  E, W& L: w
    219.        book.write();
    220. ! M5 A1 l7 x, m2 X( ?+ m
    221.        book.close();) e4 n' V6 Q% p; x
    222.       }//end try
    223. 9 {) a% @; l0 e! H: c\\" @
    224.       catch (Exception e){ e.printStackTrace(); }
    225. 3 f1 _& R. m\\" J# Y3 O( V3 X
    226.    }
    227. / E9 n' E; j\\" p3 o& d) `% T- U
    228. }( e5 @/ b4 `7 _
    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-6-7 13:37 , Processed in 0.485785 second(s), 66 queries .

    回顶部