数学建模社区-数学中国

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

作者: wangzheng3056    时间: 2013-8-9 11:28
标题: 【转】Java操作Excel方法详解
  1.   JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。4 _. x. c6 v+ C' x1 Y5 S. C# T
  2. # v: E, }/ b9 b
  3.         1、环境配置
    - R" |" h6 z' E4 u' i6 n

  4. 0 @( C" r4 Q% s1 o  ^! r1 A
  5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    / @, f# N3 F1 }6 c" r* @
  6. $ k9 c# `' O# ]% y1 y' t2 X
  7.         下载完成的包解压之后,可以得到如下几个重要的文件:5 T' M& a6 r4 \  }, e
  8. 5 x; S' C- K) f
  9.        (1)jxl.jar  —— JExcelAPI 函数库;) @. m, s/ n4 G& X4 F3 a4 z+ k
  10. : k0 s1 G3 h8 j; H
  11.        (2)docs  ——  帮助文档;- S- q0 b+ L3 |

  12. ! ]4 I6 \& K* ^. M3 e; C
  13.        (3)src     ——  源码文件夹;
    * i0 y# G( M% ?

  14. 4 m% `# I: D, \8 o3 W
  15.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    3 A! o, P1 Y9 c0 n8 K. d- P

  16. ! I+ }5 N/ X, P! |* ]
  17.         2、Excel基础操作实例
      |& F. e& ~/ K" P

  18. + F* b3 ?$ a! r! n$ v( [
  19.         (1)  创建Excel文件   
    - {2 [, h( {: i/ Z6 n

  20. 7 U. E3 Q, H6 H$ Y" ?% o
  21.   /**读取Excel文件的内容   2 T! Q& I  [6 r+ T/ I
  22. * @param file  待读取的文件   9 C8 @  |5 W7 K9 n
  23. * @return   // 生成Excel的类    */
    1 R, k8 d; u7 n8 U" N- [* W
  24. package createxls;2 H1 ?/ ]) q( o0 S2 m9 ^

  25. , c2 e3 L$ i$ `
  26. import  java.io.File;   
    . b, t" ?1 i0 b9 C- b" j
  27.   ( e- K- ^9 v; g. G/ Q# E
  28. import  jxl.Workbook;   . Y1 G9 r# v+ J, K6 A% X7 ^, f
  29. import  jxl.write.Label;   
    ; j/ ?+ v! Q2 l8 `! K, R
  30. import  jxl.write.WritableSheet;   # f: n7 d$ k3 n6 u
  31. import  jxl.write.WritableWorkbook;   
    & c1 A* F$ a* H5 T4 E7 P& Z% H
  32.   0 x, _- \8 N- m/ {
  33. public   class  CreateXLS {   
    : D6 v+ p) Q  C- }6 l6 Y
  34.     public   static   void  main(String args[])   {   
    5 t; W8 j' S/ n$ ~$ j1 s! L# K
  35.         try    {   
    ) m  n' \. O8 D5 H
  36.             //  打开文件    ( c1 `& b6 [, _. e" C9 e
  37.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));     t5 ~* |( U* |) i4 f
  38.             //  生成名为“第一页”的工作表,参数0表示这是第一页    ' D* P. P0 y  Z2 w5 m6 M5 I
  39.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
      H) L3 _" c- g: e
  40.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    0 V$ M4 N6 d8 N. Z, Q. X! J
  41.             //  以及单元格内容为test   
    : g0 o* P# Y# j
  42.             Label label  =   new  Label( 0 ,  0 ,  " test " );   3 X1 J+ F$ V8 v; i. ~
  43.   
    " r- j! I* g( l/ b
  44.             //  将定义好的单元格添加到工作表中    $ W# z- |! u, P) q6 C
  45.             sheet.addCell(label);   * ^0 `# W5 ~; S& I9 d$ d" P
  46.   
    $ d' C; O. o3 \1 m3 K* P
  47.             //  写入数据并关闭文件      p& l) c9 x& m9 S4 `* K
  48.             book.write();   
    7 f2 }. a/ ^  [- i8 @7 N, C
  49.            book.close();   
    7 c, `3 p/ B, J0 e
  50.   
      ^! E1 R3 s0 {
  51.        }   catch  (Exception e)   {   
    0 h: s6 d* h6 U: n: I: o
  52.            System.out.println(e);   
    & l' @5 D* s) @
  53.        }    2 E5 j( A* `  A; _" Y# Q+ o
  54.    }   
    . M( }: v% O  G* N; o' v) W
  55. }   ; [, K) S, N' U6 w: R3 R: R

  56. + K$ L7 j4 q& ~2 S' `9 V+ E

  57. / i% s; r) G3 ]7 F8 P6 o" z* @
  58. : |( Y0 a+ G# a& b3 z) ?- l
  59. (2)读Excel文件: N/ r: @5 s6 G

  60. 7 t7 B! Y9 c4 N; \& D
  61. 0 X1 g/ ]  \1 I
  62. package readxls;. f$ y# `! h: c9 a4 J9 m

  63. 4 M! m; C3 s2 l; c1 L* c  }/ B3 k
  64. //读取Excel的类   
    7 H- l$ B+ V0 z7 U7 S$ f8 L! E& F
  65. import  java.io.File;   
    / d" E! W2 s9 H5 `
  66.   . z; E$ j) j$ E$ ^* R
  67. import  jxl.Cell;   
    + u' ^! m4 U2 l. s
  68. import  jxl.Sheet;   . I3 c5 H, i2 |; h7 ?+ ]
  69. import  jxl.Workbook;   # l+ C' X# H8 j% r/ j3 L% E" q
  70.   
    . p) k2 Z; b3 |& Q
  71. public   class  ReadXLS   {   " e% l; ~" O+ `) i
  72.     public   static   void  main(String args[])   {   
    8 ~* L5 X$ r# z( O. u/ {" u
  73.         try    {   
      D3 e3 ?# E7 k* B( l. \
  74.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   - K5 N9 I' B: P: o/ K* k. u0 D
  75.             //  获得第一个工作表对象   
    0 v/ q7 j) ^( s$ M3 b) m- B& x
  76.             Sheet sheet  =  book.getSheet( 0 );   ; p  @; q2 @/ p* V" ]
  77.             //  得到第一列第一行的单元格   
    / ~) {+ _, w3 T. N3 K& O. x
  78.             Cell cell1  =  sheet.getCell( 0 ,  0 );   
    9 S( [4 v/ E0 ^' F. q: ^
  79.            String result  =  cell1.getContents();   3 x) Z* X: f" D' f) B$ Z* B
  80.            System.out.println(result);   # S% g1 D9 L: L) |: p
  81.            book.close();   1 L0 ~3 W. m* q+ A
  82.        }   catch  (Exception e)   {   
    & i6 E0 `' d* X6 l* f$ k
  83.            //System.out.println(e);   , ^0 @2 C( S% |  i
  84.         e.printStackTrace();
    * t& g, O, ^! o2 H8 O3 M) |! A
  85.        }    2 ~! @0 L$ |; e8 F% A* W! k! n+ |
  86.     }      d: F# y6 F+ N) t
  87. }
    # i2 Y1 F  `3 w) j: H# [; E
  88. . v8 |6 ?( J  q' Y9 ?
  89. 7 f4 d$ S$ o% G& d

  90. 4 p! o  G: p. k4 N8 e6 f

  91. - Q6 k6 ~% G0 \" c- y
  92. (3)合并单元格、格式化单元格等
    # a6 Z/ n8 U2 u% l

  93. " D% }( h. w6 q

  94. 1 E! N( f) _. Z! E
  95. //合并单元格并在单元格中输入内容! p1 g6 k% B2 Y$ |4 ]' `% X
  96. 9 L; J! a5 ^2 A7 R
  97. package additionalproperty;
    ( _3 N% W( ]$ T  t; b9 H

  98. 1 f" f0 W- q! {% i
  99. import java.io.*;2 E' ~4 b" m$ |+ ?8 ]
  100. import jxl.write.*;
      M. u4 ~! e! u$ x- E0 k
  101. import jxl.*;& s6 h2 c. F, G
  102. - N9 W# s* ^4 Q8 B
  103. public class MergeCells {
    2 G0 K0 _9 U- @2 o: ?" z" B0 j- s
  104. public static void main(String [] args){
    ! z/ g- Q% E3 X8 r8 a7 R
  105.   try{
    . {* P1 D  T7 u9 y" E
  106.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    7 `8 e* X  M4 m4 o* `6 D5 r7 s
  107.         WritableSheet sheet = book.createSheet("第一页", 0);4 Y8 b+ T6 Y/ }6 Z, b7 N
  108.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    % I" \* j5 K; ]% P! W' m
  109.    9 t6 }* s& `  [" a- Y2 ?
  110.         //设置填充内容的格式* h' T4 s, K4 T: N1 ?7 J6 L
  111.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);& ~* K5 A& W. d# `! k
  112.         WritableCellFormat format = new WritableCellFormat(font);
    / j  C. n6 e; A3 R, D4 ?" F
  113.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中
    * U  W1 p  R- F/ x; |( ^( I
  114.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中
    0 U( o, D: T# N8 P5 u  v4 p
  115.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式0 U; D3 R! `% g
  116.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式4 L. a" R) g: Z9 b
  117.    
    . X! Y$ U3 y/ H$ }
  118.         Label label = new Label(3, 3, "合并", format); //添加内容
    2 H- M! l0 D& u9 U! K
  119.         sheet.addCell(label);0 ]% D/ t3 t9 X6 v; o$ j1 s2 c) f
  120.         book.write();- Z5 h, x( j3 w: @7 c
  121.         book.close();; n2 I1 H, n4 |( y0 |) b
  122.   }//end try
    4 @, X. }6 u3 K4 g+ X
  123.       catch (Exception e){. f% V- d. j; }8 k* I1 T' U
  124.            e.printStackTrace();1 N4 m! F4 [' f
  125.        }" J9 n3 T1 j  w; u1 v( _& D$ h  c
  126.    }5 n# c+ j. t5 m, H
  127. }
    ' X. [# e8 ?/ T7 I* k
  128. - X1 y. }0 O6 h6 I, B
  129. $ j2 V0 G0 z2 U. K& S( i% b2 O, s* n

  130. % H% y3 p( @* L6 p! M
  131. (4)添加图片: k0 c1 W7 `! @) U% E% h' E! D
  132. 3 U( u2 Y+ R8 a1 ?. ^2 r; j  h2 v" @
  133.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。; O7 A3 x1 y3 {% i1 f3 B/ K7 @
  134. 4 i4 T( Y+ W4 M- w

  135. : T; {. t* u( |
  136. //在工作表中添加图片) U: R0 {. X) i
  137.   I' `: y# X7 \, f# n
  138. package handleimage;- c6 x' ?  x( b
  139. 6 v2 ~+ [: v/ i- _" ^% s
  140. import java.io.*;
    / S$ v" T5 P, D
  141. import jxl.*;
    % q7 |0 C# ]9 s7 h4 W- n' v2 j# Z
  142. import jxl.write.*;
    , d4 o! [6 L8 v4 o0 o8 e# T

  143. / \0 p7 J5 t& G6 O4 z
  144. public class CreateImage {6 r7 l# Y/ j3 F! ^
  145. public static void main(String [] args){& w8 N( g9 d2 g4 q+ ~
  146.   try{  s2 y/ R4 I$ B$ {$ D5 S* Y
  147.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    . N" v! K1 o2 R% U/ F8 v7 \
  148.        WritableSheet sheet = book.createSheet("第一页", 0);
    1 V' z; t# z  M; j6 u9 d) D8 C
  149.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式! P$ J" z* C* }+ _- k
  150.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));' O8 c2 A, c2 P6 H7 W- o  r- j
  151.        sheet.addImage(image);  //添加图片& r9 T4 @! k* F, f
  152.    7 s4 k: |% Q; |8 z
  153.        book.write();
    . i0 o9 j; `1 d( Y) c8 q2 S3 a
  154.        book.close();  P/ b- J5 R2 X2 s' E9 A
  155.       }//end try
    ; r+ u* u  p. L( Q1 g
  156.       catch (Exception e){ e.printStackTrace(); }5 A' {- ]8 x/ b. K  U) c
  157.    }
    1 i. N+ Y7 S0 l, Z! Q& P
  158. }
    $ a' e& w' I4 r; t
复制代码

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




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