QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2423|回复: 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的使用方法。
    2. , i& G- L\\" R! A, y
    3. * b2 {* v( L- ^2 V
    4.         1、环境配置
    5. 2 ]9 m( Z+ B, g5 D
    6. . R7 ~8 L& S% l/ r4 A
    7.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    8. : I: p- ]& A' t3 z6 e4 d2 ~- g\\" E( N

    9. 0 M- @0 n7 |& K8 C\\" I
    10.         下载完成的包解压之后,可以得到如下几个重要的文件:2 U4 f7 p4 @& |+ K& C
    11. 4 p6 b; [! I$ c4 \& b
    12.        (1)jxl.jar  —— JExcelAPI 函数库;
    13. 2 U& G' s! b0 ?

    14. + i- A+ F$ W/ |6 O* y$ F+ G1 N
    15.        (2)docs  ——  帮助文档;5 P% E8 u( G8 e; o. X

    16. - _( ?9 b! ~8 R4 E% Y
    17.        (3)src     ——  源码文件夹;% E: T+ P6 u! F+ `1 S( E

    18. \\" B, L0 A* j$ z$ ^3 u
    19.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。9 y% T\\" G1 R$ \( |* t

    20. 2 S+ |- M' [: }8 J) {2 M$ ]  ^( w
    21.         2、Excel基础操作实例8 i\\" _/ C# A, b$ ~
    22. : y% e. m1 W. Y5 x9 h
    23.         (1)  创建Excel文件    / Z% L* b3 r9 }# U. w+ d) F

    24. 1 _+ B- i) k7 S6 A# P. E. `' H# e- {
    25.   /**读取Excel文件的内容   
    26. 2 I2 o4 b% Q4 ~& y
    27. * @param file  待读取的文件   / r6 _3 z8 }( o8 F+ {; s! t
    28. * @return   // 生成Excel的类    */
    29. . T) z) k: W# }3 @
    30. package createxls;
    31. $ j! V; r4 p& k% [% b( u% G
    32. 6 L9 j- a. F& |8 Y' e, i7 c
    33. import  java.io.File;   % |% P3 k# D6 E' p- j
    34.   
    35. 3 n; m3 E7 q; n( v5 V4 n
    36. import  jxl.Workbook;   
    37. 7 `; q9 K% u: {% Y8 K( U
    38. import  jxl.write.Label;   
    39. 0 p\\" J- x0 t  P3 c  H7 p. G; q6 l
    40. import  jxl.write.WritableSheet;     w\\" W5 u\\" ?5 a' x# O
    41. import  jxl.write.WritableWorkbook;   % {( m* T& Z- ]& |
    42.   
    43. 7 ^* G; d5 K0 O- _\\" P  x
    44. public   class  CreateXLS {   
    45. , I- b' J3 F1 V- D\\" |; b1 V
    46.     public   static   void  main(String args[])   {   
    47. . A5 n  F! l$ Q2 l* m8 p* ?  O$ B
    48.         try    {   
    49. / [5 `  |, o9 o3 {7 O; \* z2 y
    50.             //  打开文件    & B* r$ C% X2 d; {1 ?
    51.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   8 ?1 c, q) i! N& \# W& o
    52.             //  生成名为“第一页”的工作表,参数0表示这是第一页   
    53. 3 r& U! z$ o$ t2 `- u( n\\" J
    54.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    55. , j8 ^. d% x\\" B\\" c# H' d& P: ?
    56.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   6 y4 R) f% ~2 u+ @
    57.             //  以及单元格内容为test   
    58. 9 D  k& x: f  L% {
    59.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    60. 3 m1 J$ t+ ~0 n* g& J4 H( \
    61.   1 F\\" ]& a7 ]  X1 i. u
    62.             //  将定义好的单元格添加到工作表中    ; N& i0 r2 C' l1 [4 n# y5 U7 b1 S8 j
    63.             sheet.addCell(label);   
    64. ) ]7 J\\" I' T' J- a  W9 {' M! \( w
    65.   
    66.   n5 K* s5 R% v: ~) p\\" q- {# W0 {
    67.             //  写入数据并关闭文件    ' M. q# W6 U0 Q) g- c& d* D2 U
    68.             book.write();   0 W; U' m) ], s* c' l
    69.            book.close();   : _, K2 V+ J  I) z) C& o
    70.   
    71. 9 `7 n. C7 y. {, w
    72.        }   catch  (Exception e)   {   
    73. 5 a! i' Q* M& w2 p6 P4 D\\" Z
    74.            System.out.println(e);   
    75. ( j2 B0 ~4 `& g# E: @; ?) w
    76.        }   
    77. / r1 A: q2 r+ c# O# ?+ z# O, u
    78.    }   
    79. , I! ^6 w3 Q; j7 K7 D& M
    80. }   
    81. ; X$ i- j9 V+ b1 f/ j6 N- U( [, T! T

    82. 9 S' i9 v: _0 o* K

    83. % p- d4 o6 T) K0 a) `  x% G

    84. 4 C6 D! g2 Z4 M\\" \3 W
    85. (2)读Excel文件\\" ~) A& O4 e  D

    86. 1 w0 ]4 S, I$ e\\" e7 s\\" r
    87. $ f0 d) l/ K. K8 S6 i
    88. package readxls;3 O# |\\" F; S$ Z$ J1 G2 }

    89. 4 y! x( B& Q% M6 M' ?1 |
    90. //读取Excel的类   
    91. / I# v$ q; s9 W- n
    92. import  java.io.File;   7 U4 L3 L- b/ `; m+ G. C2 M
    93.   , |/ `: |+ |3 s4 [
    94. import  jxl.Cell;   
    95. ' Q6 @- B! r8 O, b/ S
    96. import  jxl.Sheet;   
    97. ( f  Y' @* ^. i. J  W9 A
    98. import  jxl.Workbook;   
    99. 5 D8 s. R1 F2 R\\" m
    100.   ) Q0 I3 X& G/ E8 Y7 ]
    101. public   class  ReadXLS   {   
    102. ) B  H, e2 ?9 b  H# F& i
    103.     public   static   void  main(String args[])   {   + e7 k5 V( G5 S\\" ^! e) ^1 Z% N  Y! S5 r
    104.         try    {   5 w* S9 M0 F9 b
    105.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   
    106. 5 i. h- s6 _' D+ k  |2 x. T
    107.             //  获得第一个工作表对象    ) E6 |4 X7 |* a: R  _: }
    108.             Sheet sheet  =  book.getSheet( 0 );   7 X* F- `$ Q\\" ^* Z  U
    109.             //  得到第一列第一行的单元格   
    110. # |7 N8 g& d# N/ {* M! x
    111.             Cell cell1  =  sheet.getCell( 0 ,  0 );   \\" I( o# p, b. E, l& C
    112.            String result  =  cell1.getContents();   1 H) x+ H2 F* C; m
    113.            System.out.println(result);   ( q3 V2 f$ l* C. x6 Z9 V$ C
    114.            book.close();   0 x: o* R/ \$ s; N  |/ [+ E. P
    115.        }   catch  (Exception e)   {   2 Z0 H  N* y3 S& V5 y\\" \
    116.            //System.out.println(e);   9 L0 B6 l$ \2 M0 E8 ^# N6 d
    117.         e.printStackTrace();7 |; l( T. T4 M! m, [
    118.        }    9 a6 n% h9 t  U6 B# C
    119.     }    ) G: ]6 }! z; J, O8 p
    120. }
    121. - u  |# o8 h' V2 k) L- W% r\\" z* ]

    122. 4 o\\" S. a3 W1 C8 r- P- {
    123. / e\\" q1 T1 V6 s' t: g3 y; R
    124. ( [! d( ~# |( K' Y% N
    125. ( z6 l: b5 f1 g4 E3 i
    126. (3)合并单元格、格式化单元格等
    127. ; g, N; c6 m8 O7 ~

    128. / o# k. p, Z3 l2 i

    129. 5 M/ x* r/ I! U; V
    130. //合并单元格并在单元格中输入内容2 }0 U7 H9 \8 V, z( c% c+ c& ]
    131. : X3 k0 u9 z, K0 ^; X- K
    132. package additionalproperty;
    133. 7 q1 [! X' \  ?\\" p  }( u
    134. ! F7 n2 A5 r\\" {9 {* Z' w
    135. import java.io.*;
    136.   G- G& y1 Q/ {1 d0 G2 L) w
    137. import jxl.write.*;
    138.   D! ]3 G$ a! B8 X0 p/ B
    139. import jxl.*;
    140. ! {* e+ q5 e* m- R0 u
    141. 9 a) A7 {7 k: t2 K0 G
    142. public class MergeCells {
    143. & O5 I, G6 p) o$ z
    144. public static void main(String [] args){$ l+ d* n- Q0 t% N
    145.   try{& V, Y' w9 C! m
    146.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    147. . I9 f\\" C  ^6 [4 H2 c
    148.         WritableSheet sheet = book.createSheet("第一页", 0);
    149. \\" n; G1 M\\" R* F: t# ~2 F) M& _
    150.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格. a3 L: v+ V& [1 t5 }: i* D0 ~
    151.    
    152. ( M) g- Q% _2 Q: j' d# b\\" w( K4 O
    153.         //设置填充内容的格式# [: ^7 w- V8 \
    154.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
    155. 7 y& G# t3 u6 ?7 E+ k
    156.         WritableCellFormat format = new WritableCellFormat(font);
    157. $ p. [* z5 E- U' r3 U' p
    158.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中# l- F\\" A/ P' d/ U9 L4 K7 ^' \7 K
    159.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中- W6 {  V/ v9 Z
    160.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    161. 9 V: c1 _+ F  n# t  T, y
    162.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式
    163. + U; y2 I4 q9 T: N/ ^, C
    164.    ' }  z: m: t7 R' q3 _
    165.         Label label = new Label(3, 3, "合并", format); //添加内容
    166. 1 v% J( I- o5 _% m
    167.         sheet.addCell(label);
    168. 2 X: E\\" u; x* m( i- f: B/ r4 S
    169.         book.write();
    170. ' y2 d  t4 s* k\\" E) @) E
    171.         book.close();
    172. * V& c* r) N$ g. q- A! ~
    173.   }//end try
    174. + E) f! y0 w7 I8 E$ s\\" T: ?& P, u
    175.       catch (Exception e){) v0 O& O$ x, Z! M5 }. {
    176.            e.printStackTrace();' {% _- Z3 @! I2 i7 G\\" L6 \
    177.        }) @! f9 _( ?1 a. T  W
    178.    }( Q- q( d4 k; ~% h5 ~
    179. }
    180. ) b- R) }7 O' O  M

    181. & m8 l5 d2 }1 d8 w# O
    182. / ^3 I+ x0 j- z+ Y1 j1 ^& V* s/ U

    183. 9 C! Y- F* S, p# N1 V
    184. (4)添加图片
    185. * i$ H\\" f+ g: v0 {3 ~
    186. , M. c& c\\" g2 `7 w- ~6 o! H9 R
    187.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。; l$ }8 M* e  d+ ?5 N' f

    188. \\" e7 @, `# Q0 [& Z. d' g5 p& u3 {; H\\" A9 D

    189. ! I$ E% R, y5 J2 k$ Y2 a# r+ |8 F
    190. //在工作表中添加图片
    191. 6 Y% U6 h% j# H; {. B- r

    192. 5 j$ }4 }* T1 M* }, y$ m8 \* Q
    193. package handleimage;4 C% R9 [$ g\\" `/ S: A8 l; ~

    194. 6 L\\" h/ I$ X* y6 V
    195. import java.io.*;
    196. $ ?8 `$ `! H$ p4 G7 ~
    197. import jxl.*;$ w% B+ }! E2 p. W
    198. import jxl.write.*;' Z2 h/ c6 R3 h\\" S2 d2 q

    199. * i& H6 p- j) w( x
    200. public class CreateImage {
    201. $ \* g$ q, T* ]4 q
    202. public static void main(String [] args){9 x2 u, e& H4 [, R% u
    203.   try{/ e8 t% m6 p, R
    204.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));\\" e5 l& O! {) N) r! v
    205.        WritableSheet sheet = book.createSheet("第一页", 0);' \9 [- v$ p2 K: K
    206.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    207. ' Q+ Q) @* e& A
    208.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    209. $ N  N5 j7 l( B\\" y0 o! ?- b) Q
    210.        sheet.addImage(image);  //添加图片
    211. 3 c. N+ f* [; A( e$ _: |8 }
    212.    
    213. 5 w% w7 l& {! ?
    214.        book.write();
    215. 8 [% V\\" ~# e* |0 ^& H3 h* W% B- h  T
    216.        book.close();
    217. & B: h0 p0 v# f5 C5 O; p; N
    218.       }//end try  r0 x# \7 R! W
    219.       catch (Exception e){ e.printStackTrace(); }
    220. + C: b0 {( j) L  R% J* v
    221.    }& b0 I# @1 X) O; U+ l5 ^7 j+ J
    222. }
    223. 2 u9 u  a1 U3 V! W4 n& `' ]4 @
    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-7-24 10:27 , Processed in 2.501523 second(s), 62 queries .

    回顶部