QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2150|回复: 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的使用方法。9 g  D& q8 e\\" s. b

    2. ; w% e. Y7 j/ |/ J6 e4 A
    3.         1、环境配置+ Z$ V\\" z* Q# b% e$ ]% c, @% t4 e

    4. 6 K3 c1 G1 A. @
    5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    6. , x/ x' f- |$ u) a5 p
    7. ) G! g4 W8 x9 H
    8.         下载完成的包解压之后,可以得到如下几个重要的文件:3 b+ C: z1 [  J: ^

    9. . r5 I& y+ a- C% ^! R* z& l4 r
    10.        (1)jxl.jar  —— JExcelAPI 函数库;
    11. 8 X4 T/ Y5 O3 e0 \4 d. z
    12. : X# e\\" v- G6 m
    13.        (2)docs  ——  帮助文档;8 I1 v+ N. _* l9 C9 Y# v: \) Y
    14. 0 I5 S% Q0 h' H7 f
    15.        (3)src     ——  源码文件夹;
    16. 1 x3 |2 N; ]  d1 P1 S6 D
    17. % E' d% K- d5 l* q( z. }: b1 c8 ~
    18.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    19. ! S3 l6 j, f: T$ Q5 x( c

    20. 6 t8 D4 E6 K9 q4 _# K) T. i& B; q
    21.         2、Excel基础操作实例! T3 D- l* Q2 Y) }) X, @
    22. 3 d: L) S% q. s: w) z
    23.         (1)  创建Excel文件   
    24. 8 S8 h7 o0 h: l- H2 h3 \
    25. 6 t9 ?  q, L9 r
    26.   /**读取Excel文件的内容   ) m. G& `4 |3 R& `
    27. * @param file  待读取的文件     q: ~- n3 \\\" u' o; v: ]3 l/ x
    28. * @return   // 生成Excel的类    */0 g$ R7 S: P\\" F. H  @/ p
    29. package createxls;/ `\\" @  A# I- A$ ^7 ~' w

    30. , l* s) i2 W3 o$ K) o4 n) k2 ]
    31. import  java.io.File;   0 w. `* e' ]) ]% X* U: k6 O, c
    32.   7 T+ ^1 u- D( f0 T& x$ z
    33. import  jxl.Workbook;   
    34. 1 G\\" x6 E) ~- E3 L+ c7 C
    35. import  jxl.write.Label;   
    36. * M( y! {  t* h; |: I' F% @% S
    37. import  jxl.write.WritableSheet;   
    38. 2 z9 p- o4 Q; a7 b* V# _
    39. import  jxl.write.WritableWorkbook;   5 G, G* V4 t2 y& u# c/ H
    40.   ( I; [* j  ?3 j2 @% K: p0 D& k* V
    41. public   class  CreateXLS {   
    42. / ~% e' r9 K6 D- r
    43.     public   static   void  main(String args[])   {   ! t4 k0 R: V! h6 T7 Q% a
    44.         try    {   
    45. 8 k& X- }: h. Q
    46.             //  打开文件   
    47. ; n) {$ |5 k; w6 u
    48.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   
    49. $ o4 @\\" u4 T& K. j4 u8 }: ^
    50.             //  生成名为“第一页”的工作表,参数0表示这是第一页   
    51. / @/ O& w5 q, V- N+ d
    52.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    53. 7 t( k- ^( B: V4 H
    54.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   $ O- K( i# C5 w; b; k* C- F1 \
    55.             //  以及单元格内容为test      y. R  V. H5 Q* Q$ p
    56.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    57. % P* i3 {5 M* x) C' d0 u: [, O\\" C
    58.   
    59. : Q' S# @0 y1 ~: b# O- c
    60.             //  将定义好的单元格添加到工作表中    8 W! F1 p' X* L; J0 e
    61.             sheet.addCell(label);     }5 ~' S- S3 k* ^% f\\" G
    62.   5 G. u( f; |6 V9 _0 F% e
    63.             //  写入数据并关闭文件   
    64. # ^: m7 D: c: j\\" n
    65.             book.write();   
    66. 6 {# e) z  I4 [: n0 M  \) r
    67.            book.close();   
    68. \\" P& Y, u$ [/ O\\" T  Q- Y3 t
    69.   
    70. * b# X& C# U2 I& g2 G  U
    71.        }   catch  (Exception e)   {   
    72. ( ~, T; n$ \+ n; d, |( ]2 r3 U$ {% i
    73.            System.out.println(e);   
    74. 2 _5 q  L8 S9 i
    75.        }    8 g2 f/ P5 C+ J- A$ u) f
    76.    }    $ k1 q: n0 C- ]# Q# c
    77. }   
    78. . |\\" X, }8 _% b5 i8 D; T- f6 Z6 F

    79. ' Q& u+ L* b9 s' S% k  R( e+ ^
    80. & ~# T1 o* B3 r' N$ B2 Y
    81. 8 Z) X0 W# K& H4 f( n# Z
    82. (2)读Excel文件
    83. ; F3 E* ?4 q3 ^
    84. ! L* [0 E$ o7 s\\" A1 S1 n& W
    85. 1 o. J! L( C5 `% A- V4 x
    86. package readxls;5 K0 ?8 K8 U8 c5 d: O( Y  ~
    87. : O5 p! M! j8 b  G6 B
    88. //读取Excel的类    ! D9 R5 \' a; z
    89. import  java.io.File;   8 W% S$ H6 J3 f\\" f* C6 A
    90.   
    91. 0 a' I7 r! ?. O  S7 g0 {7 q7 U
    92. import  jxl.Cell;   
    93. 9 F2 I$ e0 I7 ^8 Q# R
    94. import  jxl.Sheet;   - o. U- X9 w5 Q( W& }  m+ w
    95. import  jxl.Workbook;   3 B: k9 O+ ^3 m9 o1 @
    96.   & ^2 }* U- u$ ~6 Q$ Q' z\\" t
    97. public   class  ReadXLS   {   
    98. 1 @- |+ e! b0 Q+ \% }
    99.     public   static   void  main(String args[])   {   
    100. 1 F( ^# ]& ?\\" a8 P% _
    101.         try    {   
    102. : u5 k( y5 W# I& [% C+ m
    103.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   : H# f2 w& A) X: P/ n- B* r  e1 u
    104.             //  获得第一个工作表对象    $ R- h5 w  z8 s1 a  S$ C7 f6 a
    105.             Sheet sheet  =  book.getSheet( 0 );   
    106. : p# c- ?& \7 ]\\" U3 O, W9 \
    107.             //  得到第一列第一行的单元格   
    108. % K! p, j' d& k) ^' _7 K
    109.             Cell cell1  =  sheet.getCell( 0 ,  0 );   4 E+ f# [% R! Q4 q3 E7 u& {
    110.            String result  =  cell1.getContents();   
    111. 2 I9 k0 B\\" Z; l+ k- {. v1 T/ A8 U; R
    112.            System.out.println(result);   
    113. ) y# A* I  H4 L- g
    114.            book.close();   
    115. 8 A$ H+ n0 w' u; w1 s\\" Z
    116.        }   catch  (Exception e)   {   
    117. ; H5 [; N- ?' @8 l
    118.            //System.out.println(e);   
    119. $ }% Y1 @\\" d2 }# W  l; e' c
    120.         e.printStackTrace();1 d8 |7 q4 |7 H/ n0 k
    121.        }   
    122. $ `1 Q# L0 D0 C# Y6 O- I+ S
    123.     }    + T, K+ w+ E. k
    124. }
    125. 1 h: K6 l# u9 T1 e7 l; L, H  k
    126. 4 N. k9 o1 u; c+ G7 K( L
    127. $ |! T9 m1 n) _; k* b5 X3 D

    128. 9 f, E2 S2 |* f& W1 F# A% w
    129. 4 w1 E, E: e6 v
    130. (3)合并单元格、格式化单元格等
    131. ( [  u( g% f+ a5 _( k
    132. ( [7 c- D' {3 f
    133. 0 k- A$ `' H$ a/ w
    134. //合并单元格并在单元格中输入内容
    135. + t3 t# V( D* Z. Q* w

    136. * X4 \\\" ^. E# u; |- i6 Y
    137. package additionalproperty;
    138. 0 N$ T+ D1 g& k  E' `

    139. ' {  D4 c' Z0 w3 R0 C
    140. import java.io.*;
    141. + d0 G& {( Q* {
    142. import jxl.write.*;% i\\" @. |) y) n9 V6 ]5 L9 C( o5 T
    143. import jxl.*;
    144. : `- a7 `' G7 u) k
    145. / v( T& ?2 r+ S& G
    146. public class MergeCells {5 F4 ~8 t1 N' s, l. A2 m# r0 d7 g0 L4 d
    147. public static void main(String [] args){\\" q4 H3 @4 _8 f5 u; ^
    148.   try{+ L1 v& j3 d0 Q: B% B# [
    149.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    150. 0 o( A3 u/ D  A; w
    151.         WritableSheet sheet = book.createSheet("第一页", 0);
    152. * p$ M4 }' A& p: z
    153.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    154. # r! ]\\" J7 J' z5 p  l
    155.    9 f; G5 ?0 @9 \9 g' h4 N
    156.         //设置填充内容的格式
    157. 2 ~! L# k7 k: z( G* k
    158.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
    159. : c- v. X, [/ v; q. [
    160.         WritableCellFormat format = new WritableCellFormat(font);
    161. ! t* `: m7 ^9 z( o6 {
    162.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中) n3 e- R. H- B6 s+ c. c
    163.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中
    164. : v6 Q/ b\\" s$ S' E
    165.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式; w. V& r# ^; @6 c
    166.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式  N( [& M' K8 v5 Y0 z\\" X/ D2 c: O
    167.    6 I7 v4 H1 h) q% f8 n
    168.         Label label = new Label(3, 3, "合并", format); //添加内容
    169. - [6 C0 h+ _+ l7 A8 O( b- T
    170.         sheet.addCell(label);/ P) U2 a: d6 o
    171.         book.write();4 E' v* K! c- e% a. f
    172.         book.close();
    173. 8 ?8 ]( |* O$ F! c' l3 m6 n( X\\" Y( n
    174.   }//end try
    175. : I7 j! ^$ P. G7 G$ j( n
    176.       catch (Exception e){) _+ c1 _. l% S+ _: n6 {5 j, M
    177.            e.printStackTrace();. j8 O\\" y' s: l- M4 u. R
    178.        }
    179. 8 ^) a& U1 \9 b# F/ e1 Z
    180.    }! V: N3 N& m/ W. u$ T: {
    181. }
    182. \\" r2 U2 o( q% c+ n4 d% l2 O6 f5 U
    183. + o6 H/ F/ q3 d

    184. - a* }% i; f1 L1 Q\\" c- j7 j8 T
    185. 8 C8 x$ q2 Y2 V# S9 M2 h
    186. (4)添加图片
    187. 8 V# O/ C* z: E; O\\" B; I9 T9 j
    188. 2 S) `9 B\\" K! Y( d5 W1 B: d
    189.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。4 X  ]+ ^9 d7 [- o* t- _\\" V
    190. : m5 J4 E  B; [* i

    191.   E! ]3 C& P; n. V6 E5 V- ]: ~
    192. //在工作表中添加图片
    193. : d8 i( S: g' M/ `9 j
    194. - P, x$ _0 @3 ~- V6 W
    195. package handleimage;
    196. ; j# A9 S# f3 S% D1 ~; ?

    197. 8 ^, L8 F\\" v9 ?\\" q5 _
    198. import java.io.*;0 [6 e* O, d: o
    199. import jxl.*;
    200. $ p6 U\\" \) U0 a6 C
    201. import jxl.write.*;
    202. ' y4 R% F3 ~6 m* y
    203. , @1 _4 r6 P* ~# w% V( y/ J2 y
    204. public class CreateImage {
    205. & W/ {0 c# U1 V- j/ C
    206. public static void main(String [] args){+ K, j- y- W% h\\" h- D: _
    207.   try{. z3 d6 N+ p/ C
    208.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    209. $ J+ J) j& Y; V' t, u
    210.        WritableSheet sheet = book.createSheet("第一页", 0);
    211. 9 ^' \! S' h\\" j
    212.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    213. 2 A( ~' Q3 W! t8 N- q& Y4 ]
    214.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    215. 7 H) X6 S! ~8 I
    216.        sheet.addImage(image);  //添加图片3 P7 Q1 l  _) H9 g) H% X
    217.    1 w\\" a/ `% r; B  e
    218.        book.write();9 S4 n: Z1 e) Y) ?$ p! b6 Z
    219.        book.close();# b- }* t  L4 }9 g3 x( N
    220.       }//end try: O3 B% [3 R: q6 N2 Y& V4 k( N( Y
    221.       catch (Exception e){ e.printStackTrace(); }
    222.   a* c# t- ]: A1 e4 F\\" U
    223.    }1 K4 l( |% P) x+ s
    224. }
    225. . O9 r9 `% r7 s/ `
    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-8-15 04:06 , Processed in 0.799364 second(s), 60 queries .

    回顶部