QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2353|回复: 1
打印 上一主题 下一主题

【转】Java操作Excel方法详解

[复制链接]
字体大小: 正常 放大

937

主题

117

听众

3万

积分

升级  0%

  • TA的每日心情

    2020-10-25 11:55
  • 签到天数: 264 天

    [LV.8]以坛为家I

    自我介绍
    内蒙古大学计算机学院

    社区QQ达人 金点子奖 助人为乐奖 风雨历程奖

    群组2013年数学建模国赛备

    跳转到指定楼层
    #
    发表于 2013-8-9 11:28 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    1.   JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。% C' s$ Y' j' F. g' D

    2. % h6 y! [\\" O4 w+ _
    3.         1、环境配置
    4. + j0 \3 T9 @. q1 ]9 ?
    5. : U. P. m; \5 K( n
    6.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html* e9 A# q7 ?8 K
    7.   A) C8 f( ]& ~+ g5 n4 i; p
    8.         下载完成的包解压之后,可以得到如下几个重要的文件:) \0 O. c# ]+ n4 V* P( ^8 m
    9. 6 @& f  y\\" X\\" v9 |7 o
    10.        (1)jxl.jar  —— JExcelAPI 函数库;
    11. ! z. T3 {4 J- |. `5 e# \

    12. ( J) @. v3 h- `$ }: H) P2 r+ F+ c
    13.        (2)docs  ——  帮助文档;1 a+ }, n0 o; R, Y4 a0 ]
    14. 6 a, \& t2 G5 |: ^1 N* @) @4 `2 L
    15.        (3)src     ——  源码文件夹;( L5 K6 u' j. X  K) `/ e, i
    16. \\" M) W9 l\\" J. c  R/ ~; I1 B
    17.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    18. , ~( G7 R( B5 F: L

    19. . b& h7 W0 U3 }0 X9 Q1 |
    20.         2、Excel基础操作实例
    21. 7 H: s9 Q; K/ N. m8 r. n5 u& Z
    22. 7 W  J) z' |7 D4 }
    23.         (1)  创建Excel文件   
    24. ! {( B9 j3 T8 Y4 Y. H4 c

    25. # r8 K4 m4 V\\" l$ F) C& j8 t
    26.   /**读取Excel文件的内容   
    27. * d8 f+ F) b5 K! `. @
    28. * @param file  待读取的文件   
    29. 9 J; ~2 q) h5 E' v
    30. * @return   // 生成Excel的类    */
    31. 9 p/ a4 P* {, I
    32. package createxls;! g1 v6 M4 X/ N* M
    33. ; E/ v- D7 B1 C3 W5 D( G7 g! G
    34. import  java.io.File;   
    35. 9 c0 d3 s5 C5 I( A$ B
    36.   
    37. % y# W7 p# q$ X0 v
    38. import  jxl.Workbook;   
    39. 3 r# Q. X) ?; S\\" f: {6 l8 }
    40. import  jxl.write.Label;     [* j* S( f) K
    41. import  jxl.write.WritableSheet;   # t% p- Z1 u) k! y7 ]
    42. import  jxl.write.WritableWorkbook;   
    43. ; h: a, l, }; ?, P
    44.   2 ^5 K' G6 I, R- |+ R
    45. public   class  CreateXLS {   
    46. 5 i, ]) Q3 b7 X\\" l; u! d, P5 z6 [
    47.     public   static   void  main(String args[])   {   
    48. - J\\" R; }; ^; X# U7 }( k
    49.         try    {   2 a; s6 q0 Y# L8 \' ^+ A
    50.             //  打开文件   
    51. & {* M\\" m& C( Y; |' D0 i: D
    52.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   
    53. . j! z2 ~- F1 j\\" h' n+ o& d
    54.             //  生成名为“第一页”的工作表,参数0表示这是第一页    2 t' ~3 T; A8 Z7 h
    55.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    56. 4 |9 n, v\\" [. G4 _% ^% v) f1 N$ M
    57.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    58. ' r: H1 m. p3 [) v+ M  l' L
    59.             //  以及单元格内容为test    - _0 n& e4 r. {  ]; A: c) N
    60.             Label label  =   new  Label( 0 ,  0 ,  " test " );   6 O' ], g2 X0 S, |
    61.   
    62. ) S' O% \' P2 v7 T  k
    63.             //  将定义好的单元格添加到工作表中   
    64. \\" p9 w9 [6 @  B) |5 N: o
    65.             sheet.addCell(label);   
    66. : ]* C% A0 |' Q$ F) p. l
    67.   
    68. 1 d* g; P2 u5 Q, i
    69.             //  写入数据并关闭文件   
    70. 2 q! R3 k. E! I$ T
    71.             book.write();   # I3 L4 `$ c  b' K\\" D  y4 x* s
    72.            book.close();   5 x\\" x/ S5 L0 d$ R; T8 T# g* Z
    73.   * b$ S1 U9 K\\" ]. \
    74.        }   catch  (Exception e)   {   
    75. - b& y/ s\\" u# m* [! N
    76.            System.out.println(e);   
    77. % l$ Q4 x! g% X- \
    78.        }    + E% f  I1 E: E# E5 t  U* Z
    79.    }    * b' P4 w& J( ~- `0 s
    80. }   
    81. 2 M+ N0 K, q/ b4 w0 d( D7 b

    82. * t$ l\\" b  H! X  E

    83. * x\\" I& R1 T) G$ ~' D
    84. & b; q% C2 n- g3 q$ o\\" r  `# Q
    85. (2)读Excel文件
    86. : v' `! c; x* z: q# H+ I
    87. 8 F: L. S& G9 F# T
    88. # `' v\\" U# O2 x; ?$ U# C9 i
    89. package readxls;
    90. 8 }% k6 Y# l/ t/ b
    91. 1 I, q9 B% ^  J& o+ m& N7 C$ [/ s
    92. //读取Excel的类   
    93. 4 l# O, g/ q4 j, u8 x0 e
    94. import  java.io.File;   ) ?' ~# d6 F9 `/ m* A4 y
    95.   2 k) v# h4 a1 l$ a$ [
    96. import  jxl.Cell;     w$ P/ B/ P  J; \* h% }
    97. import  jxl.Sheet;   7 A1 h/ z/ z. r
    98. import  jxl.Workbook;   
    99. , n+ T5 W6 q2 V- {! J
    100.   
    101. / r, ]  \: `2 _, Q* A; i
    102. public   class  ReadXLS   {   : [9 u8 A: g2 w\\" K6 s# ~
    103.     public   static   void  main(String args[])   {   
    104. ' P: P4 }; R: B) P( w: o3 J
    105.         try    {   
    106. , _% ?7 x\\" M8 h8 \! R; \8 R\\" g
    107.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   ) x\\" ~4 k4 ?+ C; B* h& e& P) u* X1 m
    108.             //  获得第一个工作表对象   
    109. 9 t! T$ I' o  l5 U: n
    110.             Sheet sheet  =  book.getSheet( 0 );   
    111. 4 y* q0 X( ^& ~\\" g. ^+ U\\" I
    112.             //  得到第一列第一行的单元格   
    113. . D0 e+ m. S* x, R
    114.             Cell cell1  =  sheet.getCell( 0 ,  0 );   
    115. 7 y9 D9 Y' B* U/ V& P7 O
    116.            String result  =  cell1.getContents();   
    117. 9 u6 K7 f% `  t
    118.            System.out.println(result);   
    119. 9 P$ M, X; V1 Q' D: F& V( X8 h
    120.            book.close();   * T/ A/ ?6 t- \1 R- ]- j; D
    121.        }   catch  (Exception e)   {   
    122. # f3 t8 A, [: A9 K
    123.            //System.out.println(e);   
    124. ) u0 m% D0 A0 g
    125.         e.printStackTrace();
    126. ! Y: Q0 A! Y* C
    127.        }   
    128. 8 A, c6 ?3 E. P
    129.     }   
    130. 0 J! r1 s5 F+ H* ?% e
    131. }) ^; w# D$ G; S8 j( N- ]

    132. / `! [+ i( `# \1 A. s

    133. \\" Z6 i2 u) |% N5 J  T

    134. 7 N9 b. Y& W' ?. d

    135. + r  t8 T8 M\\" ?; h4 U
    136. (3)合并单元格、格式化单元格等
    137. % [% @% s2 ?2 x0 T% i5 y; f

    138. ' k% w+ a0 j* A3 @$ ~

    139. 6 [5 i5 _8 R- w  {* w: p6 ^
    140. //合并单元格并在单元格中输入内容8 ?  j: q+ H0 H
    141. . E\\" e5 A9 O7 `- t
    142. package additionalproperty;5 `/ A8 G\\" R& d; ^9 W( t( F) S& ]* y

    143. $ P! k# Y/ Q$ _$ o$ z
    144. import java.io.*;3 o+ _) i: y5 S8 g5 h: U4 ]
    145. import jxl.write.*;( `) k\\" N0 N1 H' C9 h0 x$ j$ l
    146. import jxl.*;
    147. / [2 v( v5 ^8 w9 Q0 V2 G

    148. $ F1 x9 P. R\\" V+ ?
    149. public class MergeCells {# B& ?1 M% L6 _
    150. public static void main(String [] args){
    151. 0 A. v$ @: e) M+ T
    152.   try{
    153. 1 C4 \- N1 X( H  t
    154.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));3 g4 y. l2 h6 [
    155.         WritableSheet sheet = book.createSheet("第一页", 0);
    156. 0 w# }) T- K& V
    157.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    158. $ W# ?' g( a5 d+ W% q
    159.    
    160. & S# \) S' f; O8 l0 j
    161.         //设置填充内容的格式
    162. : @* d9 t\\" ], ^2 m\\" t9 m3 _
    163.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
    164. \\" o3 |4 Q$ L8 f$ t/ O0 I: t5 T9 T
    165.         WritableCellFormat format = new WritableCellFormat(font);
    166. ( v2 E: t# N5 A0 H
    167.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中
    168. 5 b4 ~! O& [8 W7 O  _: D
    169.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中
    170. . W4 S1 p6 ?+ c1 o& a
    171.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式) q+ g6 D8 r. v/ O& S( O
    172.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式
    173. # m7 @3 B0 {- G, S
    174.    6 r1 Y' @$ `: D0 a4 Y! R
    175.         Label label = new Label(3, 3, "合并", format); //添加内容
    176. * W2 D0 i8 H- _# f) i2 s
    177.         sheet.addCell(label);3 z* H: r! x5 o
    178.         book.write();# w' K# `) A3 t) ~4 a
    179.         book.close();& L# {( g- h. T4 R6 [\\" c. r
    180.   }//end try
    181. : w+ K1 w( B& W7 j# b\\" \, k
    182.       catch (Exception e){+ T/ T/ J1 F# {! {2 _0 _0 ~
    183.            e.printStackTrace();
    184. 4 H& H; U, f6 N% ~! R
    185.        }! q+ v& g4 N  N& n/ J3 N1 I; @6 {. J
    186.    }3 H0 V1 |1 s5 r3 G# ]4 o
    187. }
    188. : Z& f/ B' M, e+ a! y

    189. $ g: J4 ^- F) T. K& Y: x
    190. 5 F\\" Z$ |4 t4 A5 g5 z% B
    191. : [1 t6 J  @8 V: e( [
    192. (4)添加图片
    193.   [& g\\" o+ D2 I
    194. : _! m: K' `5 ]2 Y& K! s1 m
    195.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    196. 6 ^5 a4 B* d\\" L
    197. + X% l1 `$ m! g/ h8 e: D- X1 N/ U

    198. 6 C5 P6 b$ |/ N; s4 ^& @
    199. //在工作表中添加图片
    200. 6 X  J. B9 Y! u6 u4 u4 y

    201. 1 L; M, ?3 R  G* x0 Q3 H+ N
    202. package handleimage;
    203. * l8 n( O8 U7 ^6 m7 a

    204.   [1 W; ~6 q4 V! i  Q  [) ]
    205. import java.io.*;
    206. ! w\\" J6 ~7 K% Q2 D( X1 y1 r& ~
    207. import jxl.*;
    208. % C1 b) K1 N/ W- d
    209. import jxl.write.*;
    210. 8 ]9 l$ M* Q% U+ w) M\\" F. e+ ]8 n

    211. + t% |' D* C, ^  O
    212. public class CreateImage {' [' V  l, G$ B  H
    213. public static void main(String [] args){- v% E% S+ z+ A. e
    214.   try{+ ]( k3 Z+ u) J1 O. ~
    215.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));- \; S# W4 H6 a; s& j- p% U' P
    216.        WritableSheet sheet = book.createSheet("第一页", 0);) e; F( X6 }% m6 H0 H
    217.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    218. 5 a! @0 J; n* f7 z0 @/ I
    219.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    220. % ]+ z' m8 @1 ~0 d) `, j
    221.        sheet.addImage(image);  //添加图片
    222. ' _0 c- c+ F8 j4 D/ Y
    223.    5 m7 T9 w+ e  p# A/ `* V6 l/ A0 H
    224.        book.write();+ M; @2 d' J/ `4 G8 Q\\" G5 n
    225.        book.close();/ e  G% B4 J; S# H
    226.       }//end try
    227. ' Y* I- i. C. z/ i4 w: N  s
    228.       catch (Exception e){ e.printStackTrace(); }) ?! p( ]3 V! V+ f9 x8 e
    229.    }
    230. 0 T2 c% ]& k* `6 |: \5 m) B% v
    231. }
    232. 4 v4 K9 H, G3 L4 v, y$ z- Z0 g
    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-1-12 13:49 , Processed in 0.561610 second(s), 64 queries .

    回顶部