数学建模社区-数学中国

标题: 【转】Java操作Excel方法详解 [打印本页]

作者: wangzheng3056    时间: 2013-8-9 11:28
标题: 【转】Java操作Excel方法详解
  1.   JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。
    : M* Q0 j9 u. n

  2. $ ?1 _6 k0 Y; [3 I
  3.         1、环境配置
      Y) a8 o. g; M2 D3 Z

  4. ! f3 W# @( P; z( |. y
  5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    ! M, l& Z, r# B. e' I: `
  6. ! b0 D( d: r- O% O1 }, K. `& O
  7.         下载完成的包解压之后,可以得到如下几个重要的文件:1 q; f" i" g  i
  8. 3 V# K: \, N5 l$ A
  9.        (1)jxl.jar  —— JExcelAPI 函数库;" ?, P7 k; P' E. N1 c* ]
  10. 0 N/ W6 u1 U" y
  11.        (2)docs  ——  帮助文档;8 w/ }! I9 A/ Q; \- F7 z2 L1 `+ |) t
  12. 7 y5 ?" f2 {4 {4 a' J
  13.        (3)src     ——  源码文件夹;
    % ?) ]* u/ G2 m' E. `( z
  14. + t  f# ~# q8 g. [# X$ n
  15.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。: o) z# h7 p# I' k: ^6 X7 q  [4 R

  16. ; q' b- A- h# d5 E& l% D# b
  17.         2、Excel基础操作实例
    9 u' ]  u7 _+ q2 _% Z( M

  18. 9 F$ \6 g3 U) z: Z( |
  19.         (1)  创建Excel文件    2 n$ }  B$ Q$ R8 Z: Q" j, p

  20. % g4 L0 A! ~: U* o) v' T7 D
  21.   /**读取Excel文件的内容   3 w7 w2 [6 v& j8 ^( n- G( J
  22. * @param file  待读取的文件   
    ) ^" j% b% w1 P/ v
  23. * @return   // 生成Excel的类    */
    + C7 d; v; J/ m1 ?- _
  24. package createxls;) H! ^+ l0 D5 z& h7 E$ _" A

  25. / _7 B) A" H8 d* S
  26. import  java.io.File;   % p. @0 I% J/ n! s2 k
  27.   
    6 c2 y- b4 V* ?) U" L* t3 H/ ]
  28. import  jxl.Workbook;   
    % c8 u' U- g. v
  29. import  jxl.write.Label;   
    9 V# `% ]" g, S1 I
  30. import  jxl.write.WritableSheet;   
    ( z3 ~( a( I0 M0 O0 q% g; ?1 L
  31. import  jxl.write.WritableWorkbook;   5 i4 Z! z0 k# o9 |0 E4 Z
  32.   % _( n2 j; s! l3 v! E; A  t8 n5 |
  33. public   class  CreateXLS {   . _9 b. l& a5 g# Q) ~
  34.     public   static   void  main(String args[])   {   - ^: E8 t  W1 Q( e
  35.         try    {   
    ' c' l$ F5 |. k: H" f# H9 w
  36.             //  打开文件   
    $ u9 s/ K: ]3 X" p3 B  W: |' f
  37.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   
    5 L' e  t8 H" `" l6 Q, N1 C
  38.             //  生成名为“第一页”的工作表,参数0表示这是第一页   
    - q" h, \8 A' M1 d
  39.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    9 w; A- \7 d4 U/ H: s. {( f
  40.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    " a8 l$ f7 D$ r# W6 U
  41.             //  以及单元格内容为test    5 W9 M7 e! Q7 Q$ x" O) \( X
  42.             Label label  =   new  Label( 0 ,  0 ,  " test " );   " j% q% h3 t( j# G' D4 ~5 g
  43.   
    " I& G; `. Q+ m' u$ W
  44.             //  将定义好的单元格添加到工作表中   
    0 o" a, u8 _4 T* q1 U
  45.             sheet.addCell(label);   * H' ~3 w3 [- s/ I7 k  z6 [' s
  46.   % c1 u; Y& [* n
  47.             //  写入数据并关闭文件    ) k( h6 |- L4 L# ^) _
  48.             book.write();   6 n, K, X0 \' H+ e' v, y
  49.            book.close();   
    . i* b. ?% V+ f9 c4 k- q9 j# a# H5 D
  50.   
    1 p2 U% I( p3 a7 d" \: ]0 X
  51.        }   catch  (Exception e)   {   
    $ j7 m/ ]; Z! Q0 h' E, {& t. n8 b
  52.            System.out.println(e);   
    7 ?( U9 I4 r4 l1 S8 D  p
  53.        }   
    ! h. ]$ l2 C8 P- r. }2 A
  54.    }    9 x1 N) X- Z2 i9 p3 K& Z" V8 Q
  55. }   
    , n* |1 n2 q! F2 y; y+ t; `4 P/ t

  56. : N3 g/ L. z2 ]" S

  57. $ d' n0 @' c" _& W0 V, d
  58. : M  I4 X3 d5 ]4 [) j9 w1 y8 {
  59. (2)读Excel文件
    1 v0 d3 y% H/ ]; K/ O/ t; I

  60. ; k; z" X# r# X

  61. 6 [- c& u: V6 ~/ q8 q: D
  62. package readxls;& W2 N! {0 T2 f4 Q

  63. 0 l/ }* \3 Q% u4 d9 L) v& c4 E
  64. //读取Excel的类    1 |7 y, W4 l$ a3 w( m) a
  65. import  java.io.File;   
    . n( }5 m4 w( q6 z
  66.   . {6 n$ M, J  u! }
  67. import  jxl.Cell;   
    8 u* G" d: A0 K! `% b8 p
  68. import  jxl.Sheet;   
    , t7 T9 I) v0 F. D! W
  69. import  jxl.Workbook;   " {; Y" M, n) {0 Z. g/ y) J- O
  70.   
    - h8 ?& ^/ u) w2 w9 C1 F' v
  71. public   class  ReadXLS   {   4 L$ q- ?; j1 f; g3 D1 t8 ]( [* [) D
  72.     public   static   void  main(String args[])   {   9 E( V% j; U5 Z6 f1 ]5 c
  73.         try    {   % R7 {$ k9 [% h
  74.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   
    ) M; X; U. T; X
  75.             //  获得第一个工作表对象    3 f7 [" y0 I9 T9 u! ^" S- N) e
  76.             Sheet sheet  =  book.getSheet( 0 );   
    0 h# V0 H# C) Z6 ~1 F4 _1 o" c. D- p
  77.             //  得到第一列第一行的单元格    : X( m& G2 Q! g9 R% ?& \$ v& z7 Z
  78.             Cell cell1  =  sheet.getCell( 0 ,  0 );   
    1 P; p& Y+ ^* {7 G  f; A4 A
  79.            String result  =  cell1.getContents();   , W) A, q) Y! k9 t
  80.            System.out.println(result);   9 l( l% \# I$ j0 K6 S% r5 j/ F0 Y
  81.            book.close();   
    " q4 E9 {, _+ D$ Q- V( w; y% a7 }
  82.        }   catch  (Exception e)   {   $ I0 A# l( V/ ]
  83.            //System.out.println(e);   
    - N. n2 Q9 f$ y, I0 D
  84.         e.printStackTrace();
    : I& t8 S( h2 ], L
  85.        }   
    " K# w$ X. g3 r2 l( H
  86.     }   
    2 P( e. f# _; {
  87. }8 v+ T0 g1 L8 c4 c0 R0 a/ V% E! {1 N

  88. / C0 U; v! J8 ^2 [0 Q( D4 C! W
  89. ( d) Z7 i3 ]8 ]/ ~7 d/ y0 U
  90. + Z; S, f' `% g& w5 g
  91. # X+ i3 L8 Z4 I
  92. (3)合并单元格、格式化单元格等+ u( d+ C/ J2 S$ w" ~

  93. % s4 q& L2 L8 M
  94. ! s$ s. [" h3 ]& Z
  95. //合并单元格并在单元格中输入内容
    / \$ V( R4 [) y& A

  96. . }& J8 l/ W% E& L% s
  97. package additionalproperty;
    ( \& b% ]: L( l8 y, u5 S
  98. - K% T- x( [0 X( l
  99. import java.io.*;2 ?, k- C# y: Y2 H
  100. import jxl.write.*;# j! e& E4 f+ l/ M! h! R. a
  101. import jxl.*;
    ! L2 J( ^* ?! ^7 Z, K3 m$ Y

  102. 5 a1 d: Z7 B6 p8 v& f
  103. public class MergeCells {
    1 h3 H) M, r7 ~0 b; T7 V/ |* k
  104. public static void main(String [] args){
    3 k# T2 o$ M; A( I$ o
  105.   try{
    2 ?& p2 B& ]" d0 L) p3 ~+ c
  106.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    3 ]: l( o  g( Y  I0 f0 Y
  107.         WritableSheet sheet = book.createSheet("第一页", 0);
    " \9 Y) F' B; ^5 L
  108.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    " k0 N( q: D5 }7 B) S6 t4 \/ \
  109.    
    - H  G/ x- W# ?$ K
  110.         //设置填充内容的格式5 q; A: g- i6 p# n! G4 ?! n
  111.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
    6 B) y0 w" y3 W; |2 C9 V8 t+ k
  112.         WritableCellFormat format = new WritableCellFormat(font);
    $ |7 C/ {1 H2 U5 F7 S
  113.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中
    ! f6 \9 E8 b; n* i/ P: ?* k! `. G
  114.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中$ l0 E4 ?0 ^2 d$ q. b% v, B
  115.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    1 _& n  r/ ]9 V1 g1 j
  116.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式
    " n. D$ g: L: I, n5 \; w+ j
  117.    4 |! r* s( A/ Y4 P- _
  118.         Label label = new Label(3, 3, "合并", format); //添加内容5 o, Y! b' h  d3 Q; q
  119.         sheet.addCell(label);
    & j# k/ S+ j( h
  120.         book.write();. O( ?9 e* i1 O4 V! o+ R
  121.         book.close();; D2 [; b: _( _- B. H
  122.   }//end try
    # T5 f- a0 O7 y1 S3 n1 p2 Y
  123.       catch (Exception e){' c' y( \$ y, L  i
  124.            e.printStackTrace();
    " A$ @6 S3 @; v) M  b
  125.        }
    ) H& h" d0 j8 Y) h8 j% @
  126.    }0 Z! }* Z3 o9 N3 {# N/ f! R
  127. }
    ' I5 b& w  [6 n) A. A: e
  128. ; E7 a4 e4 ?, D' c; D8 H
  129. / W+ ^. ]) ~$ l/ Q# ]

  130. 0 O  k& H5 v9 v/ J7 n8 p
  131. (4)添加图片
    / G; s' w1 z! S; C, r. y
  132. " o% r* n$ g& n1 n& g0 C6 R5 u) c
  133.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    $ y/ Y/ a6 X2 i( U8 ?% N0 E

  134. 1 Q. S: w- V$ p# c# C2 ~* s; ]% J" \! L

  135. / H% c* }2 ~2 U
  136. //在工作表中添加图片4 Y/ V1 V# i! B% |# b  L0 A; a# y) t
  137. + j- \! ^1 ]: y2 _
  138. package handleimage;( h* A( g1 e. J% ?' s: i
  139. 9 m' I4 d* N' Q
  140. import java.io.*;
    7 U  }- }  i8 u# V6 ?
  141. import jxl.*;
    ! C( p# a; W3 m
  142. import jxl.write.*;. W' x% W7 S, R3 L! U

  143. / M4 b+ `5 `2 O
  144. public class CreateImage {  E; M9 S0 X: q, q6 C
  145. public static void main(String [] args){; j9 ^- o1 Y" }! g. W
  146.   try{$ m4 `% m3 t, ]: z6 d2 h7 P+ I
  147.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));5 Q# h" N: v  M
  148.        WritableSheet sheet = book.createSheet("第一页", 0);
    ) Z+ |! n2 I, F4 G. d/ Z* H
  149.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    ; C+ }0 t) O( i: O4 L
  150.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    4 Q6 a" i% r4 T* B9 Z
  151.        sheet.addImage(image);  //添加图片/ {" Z- t# E! o6 m6 n1 z. I+ y
  152.    
    + w1 z( q. J9 P5 G: `, B
  153.        book.write();
    # T5 r; `  r3 _" e* O8 K( b# l
  154.        book.close();7 w4 h/ o& e) k. s, F! k
  155.       }//end try2 X9 E+ G1 s+ g! T% l. x
  156.       catch (Exception e){ e.printStackTrace(); }
    ( o0 p6 x! q6 V4 r0 O/ o
  157.    }. h  p. s0 j2 j) c& g' M1 [) o6 D" L
  158. }
    8 I: _* z8 g/ z3 h$ k" r
复制代码

作者: guoaecg    时间: 2013-8-11 10:41
Excel, 回复再看




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5