数学建模社区-数学中国

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

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

  2. 3 k6 d* x/ I/ `- T! u/ p( L0 P8 S
  3.         1、环境配置; v& D3 U5 x) P4 [( ]8 S9 a

  4. 3 K. G" n2 l2 O; v$ l1 A: S
  5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    . }7 d4 _2 P2 j. R" X/ @$ O- x7 u

  6. / C& W- c0 I+ B7 K: F& d/ Y  r
  7.         下载完成的包解压之后,可以得到如下几个重要的文件:
    # f+ u' W& E- Z3 l$ s$ ]

  8. 4 P% N% e' m- w' V
  9.        (1)jxl.jar  —— JExcelAPI 函数库;7 o0 G4 Z- t' A5 J5 n  p/ E. z

  10. , R; v$ h2 G  w1 @; z" ?
  11.        (2)docs  ——  帮助文档;
    ' d& |' W1 ]% I; G0 m/ A

  12. ( M9 s0 y( I) q$ I; k
  13.        (3)src     ——  源码文件夹;; T$ f! P+ L9 ~4 b

  14. 7 P  Z% N/ I" w! |2 ?) [+ W
  15.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    " B0 N  _  y+ ?, {3 M' o, P' Q
  16. / T9 ^; R: x9 g2 r
  17.         2、Excel基础操作实例
    ; q3 `( ^$ z5 r2 y' N' }
  18. : }0 ?0 `) J8 g0 O1 s( x# n$ }4 H
  19.         (1)  创建Excel文件    # n1 v6 ?, }: Y5 X$ P
  20. ! W  s: I% U1 C9 a2 J
  21.   /**读取Excel文件的内容   
    * J, D# }7 D# J
  22. * @param file  待读取的文件   1 ?: e# S8 H; Q7 c( i) z
  23. * @return   // 生成Excel的类    */
    + x3 {" t: w( V
  24. package createxls;
    . }* }& y& B. F" d- t8 n6 a# I
  25. ) y% a- o/ d$ L. ]/ E: U+ F& T% R8 |
  26. import  java.io.File;   
    ' k: n" u' K9 N8 I3 M4 f
  27.   
    : R; m1 y& a* {4 C: ^; ?4 U
  28. import  jxl.Workbook;   
    + T; h9 v6 I1 h# s/ ?$ F, \" }7 V0 ]! h
  29. import  jxl.write.Label;   
    / ~# s) ?2 ?( f$ O* X% F5 u: w- x4 O
  30. import  jxl.write.WritableSheet;   
    0 d  k# r9 V' _: w5 r
  31. import  jxl.write.WritableWorkbook;   
    ) j. ^; m6 [! Q1 t; j
  32.   / x4 j6 B- Z* x- B! _" K2 V
  33. public   class  CreateXLS {     P( }" x. }6 g; S; O
  34.     public   static   void  main(String args[])   {   4 X. N; W; o% \# [
  35.         try    {   
    7 C9 {1 ?, \/ k( V2 t
  36.             //  打开文件    " v  K+ B- Y2 o; \6 I0 K
  37.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   5 M& ]2 I* t  R: U5 Q# F
  38.             //  生成名为“第一页”的工作表,参数0表示这是第一页    / B5 H) \8 z% ?' c7 [  i
  39.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   $ H# d" T: _2 }" O' T
  40.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   3 W! @0 \* y8 N2 V* F* }# Z
  41.             //  以及单元格内容为test      A; u2 k0 R8 t' h" c/ b7 d, V
  42.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
      S5 W( `5 f) ^3 H' A; f. q* Z- C
  43.   
    + v9 U% ~' a+ `
  44.             //  将定义好的单元格添加到工作表中   
    * P# _! U5 X: L  n& `% i: B. k
  45.             sheet.addCell(label);   
    : m+ e: {* F- Y' D4 @) X8 e$ t
  46.   
    * b* \! B4 T6 W$ c* d4 r5 T. ~0 I
  47.             //  写入数据并关闭文件   
    3 ^5 s  q4 e; J0 N; @! `) M1 j
  48.             book.write();   
    + T" n4 b  G6 _" f6 P. R2 s
  49.            book.close();   
    9 J: r& n$ e0 z) l; h8 \3 C' J# D  @
  50.   # s  U* w& {$ j2 Q8 k# D& r
  51.        }   catch  (Exception e)   {   
    8 M. t; \; s% ~; e. m* @
  52.            System.out.println(e);   
      @! P3 ]3 l) p0 \3 L
  53.        }    . R. H5 j& ?+ i
  54.    }    8 J3 \/ P9 H1 B# {5 M
  55. }   8 o& e) B, n0 a" q/ b

  56. 2 |* y  e! X! K/ q, H& v
  57. + a0 p3 r. H7 e
  58. & M6 k- A% L9 i8 n
  59. (2)读Excel文件: H; s7 \* D, K0 O

  60. 0 h" u( i; H6 l7 n
  61. ; ~& J4 T( ?5 z+ d
  62. package readxls;
    ' Y9 a, H* c9 T$ F0 {

  63. 3 L4 z# o  a  v( B" y! K* @
  64. //读取Excel的类    % y' ]- \1 ~) h% r
  65. import  java.io.File;   
    : X  V/ A& I. b6 d* }  u, K+ V
  66.   : o7 p- J: S$ p, o+ @+ L
  67. import  jxl.Cell;   
    ( {7 C* M0 z5 L+ @
  68. import  jxl.Sheet;   $ `2 W3 \4 d: h% J. G
  69. import  jxl.Workbook;   
    ) H- }! B$ c* O% p4 r
  70.   
    ( g& q  r# ^) o" g( D6 f
  71. public   class  ReadXLS   {   
    $ s5 _$ ^) D; J# z4 M# C
  72.     public   static   void  main(String args[])   {   
    9 i8 C  r$ C: B. C* K
  73.         try    {   
    ) z4 q7 h. P: |- O* q5 N
  74.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   
    * Y* ^/ F! c# p7 d4 x' E3 t
  75.             //  获得第一个工作表对象    8 D5 h  F( T' K, M
  76.             Sheet sheet  =  book.getSheet( 0 );   2 Y0 u8 n3 z# Q- Y
  77.             //  得到第一列第一行的单元格   
    + |# q* o0 X1 z) d# C* \. u- ~
  78.             Cell cell1  =  sheet.getCell( 0 ,  0 );   
    $ C4 N$ x' B+ v8 h: e) ~2 y
  79.            String result  =  cell1.getContents();   
    9 G: l, [5 }- i
  80.            System.out.println(result);   8 ~9 l+ |! Q3 h& L6 H
  81.            book.close();   
    1 ~; b! F) \* ^# e) ?- m1 O3 H& L, I7 q
  82.        }   catch  (Exception e)   {   
    0 Z8 D0 l2 O. s! Y: U; _! H1 q) A
  83.            //System.out.println(e);   
    4 [- h- P+ A% E( L
  84.         e.printStackTrace();
    " Q7 I* g$ H$ d# Q+ ]  v, Y2 {3 K1 V
  85.        }    8 r7 k5 Q# Z9 X/ ?, g6 c; e9 n
  86.     }   
    4 [+ K9 p8 Z1 P, B3 ?* Z8 o, |
  87. }8 S& W7 N' L7 C2 p6 w/ ~

  88. 8 v0 [  a" |3 }$ s  e

  89.   f0 B- u3 R* {& I  k/ Z
  90. ; ?: H0 D. A' A5 \5 A6 a
  91. 9 @! |+ Y5 ^+ ]% O! f2 T
  92. (3)合并单元格、格式化单元格等8 b+ y& |' A/ T
  93. 6 }& k, B- {2 t

  94. $ F: ^, h" k# V7 u: \- M/ h3 ^
  95. //合并单元格并在单元格中输入内容
    ) X. d* {4 T( p

  96. % y" \! D" ?& d4 q
  97. package additionalproperty;
    # ^+ j9 |( F( u7 n) K/ g

  98. ; Q& L. p  e" n: r- u
  99. import java.io.*;4 l) U$ C- D7 r) W# C% S# H5 T
  100. import jxl.write.*;' q( w; z0 S& @- X+ c& m
  101. import jxl.*;# K) [! n+ A9 d4 w+ r
  102. % Y4 ]( G/ O7 v( I+ r, D
  103. public class MergeCells {% R& S" G. @8 t
  104. public static void main(String [] args){1 g  g' [6 v7 d- e
  105.   try{0 r, z0 b0 M( E+ c2 K! O. j2 ]
  106.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    ! u" _, a6 ^% y) p: p
  107.         WritableSheet sheet = book.createSheet("第一页", 0);) c! A5 }% y' w: \
  108.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    $ z6 a6 d; ?$ U9 A
  109.    6 O! S: n9 Y) o9 M# D
  110.         //设置填充内容的格式1 Z, n5 l6 y4 ~0 U) L
  111.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);8 T# K" c6 n8 M; r  u# s+ x
  112.         WritableCellFormat format = new WritableCellFormat(font);% r# V( T% S/ C6 U9 D
  113.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中
    7 H5 |- q' P6 O% u
  114.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中6 }+ d/ {: C# C& S7 ]
  115.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    4 d# z# f! C& o' q+ [
  116.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式3 Q8 a. ?2 @7 K" a  u
  117.    7 m% [# I  L+ D% F* T
  118.         Label label = new Label(3, 3, "合并", format); //添加内容6 X# U7 p! f7 m3 V/ V" e' ]' H
  119.         sheet.addCell(label);, a+ G! ?$ K6 P% _  O5 S0 X; ~
  120.         book.write();
    , d" H2 a+ V# |5 z( k+ K7 a
  121.         book.close();# |2 N( a% F+ u* F- b4 M
  122.   }//end try  q5 E& I* Q  Y) q% c( V
  123.       catch (Exception e){2 ]* |$ ~# G. E8 g4 H' N
  124.            e.printStackTrace();
    " D8 k# j3 T# N  {7 A) ?2 V( F
  125.        }: f  p! \4 x- S
  126.    }
    0 E! m: q1 \, c- n0 e2 H  K
  127. }, E. m$ {- p! t9 r& U& `( \  C

  128. 4 p- ?4 T1 Z& z- l" b
  129.   f8 C0 C* h& a( N& Y# o: J+ `9 S( E
  130. 7 r( ^' l0 J8 v4 Q
  131. (4)添加图片6 U! E" d. V* H" ?5 z5 `. [
  132. ' L) R) }, x; j% A5 p0 h2 x9 t$ x9 ?
  133.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。% E; j! j0 _% S% R( u8 m6 e
  134. & V. S# K& `* ~7 h: n3 r& E  v

  135. 5 K. b) S7 a& G
  136. //在工作表中添加图片
    8 v2 k& K0 Z. p* N

  137. 1 g3 |) v# c/ z+ Q; G
  138. package handleimage;
    ! s) o' p* {# _: l" t

  139. & l# [2 k4 z0 d% A
  140. import java.io.*;
    4 O0 F; v: C8 k! M' @( W3 b$ T
  141. import jxl.*;
    0 m6 T( A% K/ ~
  142. import jxl.write.*;
    2 E0 v; ^2 T6 B
  143.   g$ s( a/ q/ Y& r6 a) ~: z- v6 F
  144. public class CreateImage {
    ' b/ w6 S. ?7 N  \5 z6 }+ _  S
  145. public static void main(String [] args){+ ^% B4 P2 J, r, s/ `' W2 B
  146.   try{
    * u' z1 e' z6 ?4 C5 ~2 Q
  147.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));( G! U/ n& X6 x9 d5 n* i# ~+ X
  148.        WritableSheet sheet = book.createSheet("第一页", 0);
      a5 _! o) V. B' H3 ?
  149.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    % G  W" b" G" o! x% x
  150.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));- i" w/ E. J7 v# O1 N" \
  151.        sheet.addImage(image);  //添加图片
    ; I* _* p3 q" i) U  `: v$ }
  152.    - f" U( G) A! @$ n, d
  153.        book.write();! H6 r( @$ x% W0 t1 X; E/ D& k
  154.        book.close();' X+ k1 {' b/ _* }
  155.       }//end try
    $ H; V4 C  x5 W% ^
  156.       catch (Exception e){ e.printStackTrace(); }
    : u. u4 z# f% t( _* a8 f
  157.    }
    + G* [! K  M1 ~  B3 C$ F
  158. }
    0 z6 f, @- K' ^! ]; H% D
复制代码

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




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