数学建模社区-数学中国

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

作者: wangzheng3056    时间: 2013-8-9 11:28
标题: 【转】Java操作Excel方法详解
  1.   JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。! S( A$ d% [2 p+ ]9 |- `7 P3 l8 ?

  2. : f* f# H1 K; \6 Z/ V$ I+ D. t
  3.         1、环境配置" A% e4 \" }3 [1 f1 N2 v
  4. $ V$ a8 e# M9 [, v, |+ A
  5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    6 E9 j0 I  }4 H0 M4 b; b
  6. 3 G4 E( p! }( x4 ]: c( \3 p
  7.         下载完成的包解压之后,可以得到如下几个重要的文件:' i- W5 ?1 w4 L

  8. 0 n/ I, |8 m, k1 B3 h1 j" G
  9.        (1)jxl.jar  —— JExcelAPI 函数库;
    7 G' [& x  F4 }+ d3 e% m7 h2 Q

  10. ( V7 i- x3 p. f' g& C, Q
  11.        (2)docs  ——  帮助文档;! ~5 B! r* M8 q
  12. 1 j. @: B& I# b+ o! \
  13.        (3)src     ——  源码文件夹;
    , B0 X5 L2 [! B/ t

  14. 4 Y- ]9 P  V- P1 f2 h
  15.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。2 z% N& F0 t' @& V
  16. 8 a$ v( z# c, X5 [+ R
  17.         2、Excel基础操作实例
    $ Y% ]+ K/ U$ E0 q1 v

  18. $ Q0 I( F, i) M: t. x' a
  19.         (1)  创建Excel文件   
    * Q; Q, }) h/ \/ r7 O
  20. " {, h1 O( \# {7 m7 A
  21.   /**读取Excel文件的内容   & b+ ?  f% ^6 x* Q# m, U7 b
  22. * @param file  待读取的文件   : x7 `9 h$ j; c  x( e* c- w' Q& J
  23. * @return   // 生成Excel的类    */
    + c' j" S  t% D3 m. Y
  24. package createxls;
    4 f. Z8 U4 ]8 M* [7 Q: ~* i  x

  25. ; v$ K  a4 ]$ T7 M2 X; i: [
  26. import  java.io.File;   1 b1 _% J5 C, C7 E9 o" Z
  27.   # \6 M6 q; \! H) c
  28. import  jxl.Workbook;   
    6 n% }# r7 N3 T3 N" U# ]( l
  29. import  jxl.write.Label;   
    / @( [! G# T$ p6 E/ p: g$ i
  30. import  jxl.write.WritableSheet;   
    8 [% ?* v# ~$ Q. }$ w
  31. import  jxl.write.WritableWorkbook;   
    . M! L& w' K5 m) N
  32.   ( C. S1 }  `" x/ O* i; j
  33. public   class  CreateXLS {   1 ]. @  }. ^" \! m1 C& O
  34.     public   static   void  main(String args[])   {     N" Q4 F$ ?2 L: b/ @& w8 _
  35.         try    {   ! Z* _* k! ?/ A6 N5 |5 }
  36.             //  打开文件   
    3 W6 q! }! M( t/ {+ |! n
  37.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   - L+ ^! o, v; s( T5 \' y$ K) y5 r
  38.             //  生成名为“第一页”的工作表,参数0表示这是第一页    4 i1 Y, z! H& V% d7 i8 E' U& p
  39.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    ) {  ~( M  ]2 @- H# U; x
  40.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    ) h2 @+ l5 k% O3 U! l/ h! ?
  41.             //  以及单元格内容为test   
    $ J" `6 o# h/ w- _
  42.             Label label  =   new  Label( 0 ,  0 ,  " test " );   4 v" G$ \4 }8 _2 _8 e4 P
  43.   # k8 S' ]0 i' C2 ~* C& d3 v: J
  44.             //  将定义好的单元格添加到工作表中      m1 j$ `% I, D6 x
  45.             sheet.addCell(label);   
    , |& B- k% N/ A  _1 n$ N6 l7 b
  46.   
    & N2 J, e' I$ f: N1 H# S8 O! M* `
  47.             //  写入数据并关闭文件   
    7 W4 }$ T* `( o: y
  48.             book.write();   ( o4 t7 b  {6 p' R+ X
  49.            book.close();   
    + Y; s. V+ l4 k
  50.   6 r) V# G- r9 m) b) Z
  51.        }   catch  (Exception e)   {   
    + ?3 e' s5 e+ p
  52.            System.out.println(e);   % u, {# E' Y$ h- p9 _' X
  53.        }   
    / g. ]+ w' ]9 Y8 p; E4 r
  54.    }    # F" B. E$ Q# V3 K
  55. }   ; _2 h! Q+ X' y4 X" n! L

  56. ! R! g/ d+ L/ j3 B/ V$ d+ K" p
  57. 4 ?+ p: S" |+ z5 w* s1 O

  58. ( T! t2 D" \5 `+ b: d
  59. (2)读Excel文件
    7 e6 H9 C! D7 q% w5 }5 J

  60. - X  h- D9 E: E5 C$ W5 \

  61. 6 P* e( q! g3 }3 T% z2 `
  62. package readxls;
    6 p4 y4 N; O& s4 X* z0 {. @( Y
  63. ! M: ?9 [  l. n# f  h3 ?
  64. //读取Excel的类    2 U+ Y: e4 z" v9 O
  65. import  java.io.File;   , k) v  ~4 H9 O- [1 T! v/ m! s3 j
  66.   4 ?8 ^7 n8 ^) ?: ]5 y* h
  67. import  jxl.Cell;   8 C* b3 s7 p7 x3 @# X
  68. import  jxl.Sheet;   
    * Z, o1 O: b6 x+ x
  69. import  jxl.Workbook;   9 S  \7 f! m0 m9 [$ S- T
  70.   * _, a" X" q, H+ z% ^0 A' v
  71. public   class  ReadXLS   {   
    7 C: T( X+ e1 l$ s
  72.     public   static   void  main(String args[])   {   " C% R+ s5 a* Y, @
  73.         try    {   4 a9 D; K. Z6 H
  74.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   
    2 ]' _) E' K' W6 l, k
  75.             //  获得第一个工作表对象   
    , G- f, `  L0 f! [; @7 W
  76.             Sheet sheet  =  book.getSheet( 0 );   9 y! N) ]7 @4 K% t0 x% A+ k
  77.             //  得到第一列第一行的单元格   
    * ^) p) \$ S8 K
  78.             Cell cell1  =  sheet.getCell( 0 ,  0 );   4 [# [' d) C2 n  \$ J2 N  r
  79.            String result  =  cell1.getContents();   7 O: ~; z9 S) c3 ~" s! o4 c3 Y$ t
  80.            System.out.println(result);   * q: e" O  R; u% f! v. N$ ]7 P! y
  81.            book.close();   
    2 Y+ P  L0 G; {' ^" n4 z: K
  82.        }   catch  (Exception e)   {   0 i. b* j6 s/ t) Q
  83.            //System.out.println(e);   # a! _3 h& X7 x" U- A" P* j
  84.         e.printStackTrace();% L; x  K* B+ H0 _6 e2 C
  85.        }   
    $ s" M! E; a; o$ p# G3 O
  86.     }   
    % L3 `4 Y5 N( K: q
  87. }# G4 ~4 l9 v& R4 l: {/ E
  88. % \% |3 U! u6 l$ x

  89. & x+ u5 I5 I9 U: Y
  90. + P4 Q, T$ c6 |( V' y. D* I9 [$ d
  91. 9 B! O( L5 L! D6 @; |, @
  92. (3)合并单元格、格式化单元格等
    4 Q8 O; c9 r* @, G$ v2 N' w

  93. ! F- Z$ Z* ]$ u3 z' \4 A
  94. " l) k. E" G, Q/ P
  95. //合并单元格并在单元格中输入内容
    2 _% u8 \: @) G

  96. % K( i, {! R  v1 o% f
  97. package additionalproperty;3 C5 e  f8 P  b* \+ m, C( }

  98. 4 y4 A5 {; V4 ?' Z
  99. import java.io.*;
    9 S% S* }6 u% ~$ E: ]; [
  100. import jxl.write.*;( p, t5 o! ?; P9 X; m  K, |; L# Z
  101. import jxl.*;
    / ^7 w7 }0 f+ n
  102. " C3 x# K" `: e/ b5 c+ h- p
  103. public class MergeCells {
    , E0 C0 b$ _% h6 f8 a
  104. public static void main(String [] args){6 P" t( @% N! B8 |: V; E+ X0 o8 U
  105.   try{
    2 Q1 S- h7 t# \8 [+ _6 U
  106.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));  a+ N, }' }/ x2 Q: [$ O7 U
  107.         WritableSheet sheet = book.createSheet("第一页", 0);
    ) I9 F, F* O) Z0 z* n, ]7 X2 x
  108.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    " A/ ^! [8 Z! X) D7 X4 i) c# b
  109.    9 J# d- O/ f! k$ @; R+ |) y( X
  110.         //设置填充内容的格式, ~, Y) O7 A& N( C/ k$ f: C
  111.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);3 F5 E: L/ I! J3 Z1 s
  112.         WritableCellFormat format = new WritableCellFormat(font);7 C9 n" h  Z  Q
  113.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中$ \* R2 I. N/ S5 |
  114.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中9 n% T4 {6 F2 q% S# _
  115.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式* I+ S: g( n+ `, \" K! L9 j
  116.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式% x  @  Q8 E& K6 Q1 v
  117.    
    & d5 z2 M& P; K* C5 w5 i4 s1 L8 Q
  118.         Label label = new Label(3, 3, "合并", format); //添加内容
    % B& P9 J+ V4 \  [$ z6 w
  119.         sheet.addCell(label);
    5 g" W( x. T$ e2 W2 G, d
  120.         book.write();- e! h5 f* A/ u+ H8 m: d; a
  121.         book.close();( C/ ?' m1 H$ c2 P# }6 Y) N6 y
  122.   }//end try
    1 J7 X5 b! X+ Y
  123.       catch (Exception e){4 `* Y# J) q; b  X: A2 s
  124.            e.printStackTrace();
    ' E9 Q: a4 U3 u  G0 ^2 e  x
  125.        }& T2 F% k* \  O. S& U7 y+ s
  126.    }3 A; c! M+ e2 |, _, \
  127. }
    . l1 c# m, I  R" ^" K6 Q5 K
  128. 6 U  ^4 r; _6 S: ~3 R

  129. + j7 f# A# S3 J% U

  130. 4 R; p' o& h$ y4 J5 e
  131. (4)添加图片
    1 `. S+ O. i$ T
  132. 6 X! U8 _' _$ r  C8 ~0 L
  133.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    * R3 p: c5 B* i: X( ]
  134. ; e* ]4 T9 E7 q; K. S4 V! u. S
  135. , N" q" @( h' L  T! Y: T
  136. //在工作表中添加图片
    ) P1 w+ p+ k3 w% e( O2 N3 H- _

  137. / j6 s2 ^# K) z; ~" I% d3 @' _' {
  138. package handleimage;
    + U* {  ^. j7 X  O5 e4 y! |
  139. . ^7 Y/ ?! A9 D9 o  |# j8 {3 m
  140. import java.io.*;( A" J1 `: S% _; n0 `& c( _
  141. import jxl.*;
    % K# _- `- u2 g7 @1 a# l2 H
  142. import jxl.write.*;
    * v) F' d: W  a8 P3 V$ Q( i
  143. 9 E7 M6 i- w& w' o# Y7 k# a
  144. public class CreateImage {& M" X. M+ R# n" @8 B
  145. public static void main(String [] args){
    * Y( t  c1 {0 H: i& @. F! P8 c: T
  146.   try{
    2 }2 [6 I' J% v. @. p/ L' f2 [, I
  147.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    0 L( @' ^. N3 ^+ k/ h' A
  148.        WritableSheet sheet = book.createSheet("第一页", 0);7 H) h8 n5 ~( [* N
  149.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    : ~. W% S6 D! w( R7 x/ Y; s
  150.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    ! Y, P, ^8 @5 p3 r; G0 i
  151.        sheet.addImage(image);  //添加图片
    , r2 e9 Y/ a, p) w7 n5 z3 x5 P
  152.    
    $ ^3 O5 p9 b% K. |& P" s! Z! q2 R, ?
  153.        book.write();6 n, s! A$ K' N: Q& L$ r9 ]6 w
  154.        book.close();
    0 w! n$ y2 Z1 H
  155.       }//end try
    % u" a/ u( ^" g
  156.       catch (Exception e){ e.printStackTrace(); }
    ; F' N' t. t7 H; r: u+ L/ ?
  157.    }- m. O0 E( E) T6 Z  f
  158. }3 }7 @. M$ A' z8 g6 W
复制代码

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




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