数学建模社区-数学中国

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

作者: wangzheng3056    时间: 2013-8-9 11:28
标题: 【转】Java操作Excel方法详解
  1.   JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。7 C' b9 Q* i2 C  Q; F  j+ z+ M
  2. , S/ V+ I9 h/ k' j
  3.         1、环境配置) h% M  Q. Z4 H4 q
  4. ! z8 x* Y6 I, t' U- a5 _* ?* {
  5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html- V, i  {4 M" q

  6. 7 x( ^1 ~( }/ i( B
  7.         下载完成的包解压之后,可以得到如下几个重要的文件:8 ^! x1 x6 B, p

  8. ' U) w1 m+ W! E, }
  9.        (1)jxl.jar  —— JExcelAPI 函数库;
    # e% L! ~% b* d8 c. v
  10. 2 U, G# w' O# Y6 w6 B
  11.        (2)docs  ——  帮助文档;5 P: ]& R  Z8 [" ~# ~

  12. 8 u) V- t3 w) N  h+ L
  13.        (3)src     ——  源码文件夹;$ i& K: f8 k% P' |$ a  u

  14. 6 G2 {7 k2 l2 L1 K! H. \
  15.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。! [& U) V; H' q" l1 ?4 q
  16. ! w& V9 `2 D5 i! ^% \: a5 M
  17.         2、Excel基础操作实例: a( {% L6 j6 K4 ?+ ~5 n, x/ u& n
  18. ( y/ [; ^- J) z
  19.         (1)  创建Excel文件   
    3 U. Z& U  R  A" K5 l( r

  20. ) z( a  J  {8 V# k
  21.   /**读取Excel文件的内容   
    . l' Z0 [" o% c! p" J9 l- X, b
  22. * @param file  待读取的文件   
    / O, h. k0 {3 q: a6 V. P/ k
  23. * @return   // 生成Excel的类    */
    8 B5 V" [# u' x3 Q
  24. package createxls;
    . n. n* N5 ~) W4 n- V

  25. ! \) v- h( X$ _3 b- E5 E9 i- ?6 I
  26. import  java.io.File;   
    : _1 h% a! S# I+ _" x+ F
  27.   
    " `7 M4 I) F/ n# |/ x/ u; E
  28. import  jxl.Workbook;   8 y; W/ ]  Y2 z7 B
  29. import  jxl.write.Label;   : @& n( c* d  D0 }+ i1 r
  30. import  jxl.write.WritableSheet;   % z: G& t4 p! h# x0 |
  31. import  jxl.write.WritableWorkbook;   1 w% X- a4 o; X# ?
  32.   3 O9 A# R& S! _. e% J% S
  33. public   class  CreateXLS {   4 ^% |& S! b1 z4 f4 A' R3 L
  34.     public   static   void  main(String args[])   {   
    / Q$ _: l( H; T+ B
  35.         try    {   
    . V, P* W% z! \7 l
  36.             //  打开文件   
    + t0 m  }9 d  I, g! m
  37.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   5 F- }. l- J. r. w& l( Y
  38.             //  生成名为“第一页”的工作表,参数0表示这是第一页    ! y; p- F, n& L) g: k
  39.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    2 ?* l/ T7 j; ]; u
  40.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    0 F+ i7 S: B. o2 e6 n4 K; {
  41.             //  以及单元格内容为test    $ \' A3 T( r' a5 h& M# `
  42.             Label label  =   new  Label( 0 ,  0 ,  " test " );   : A# _+ c% P+ _! v: v* E: N
  43.   5 |7 I3 X" y" x0 o/ q
  44.             //  将定义好的单元格添加到工作表中    9 T9 |2 ]7 F+ E0 m9 z: A
  45.             sheet.addCell(label);   
    * w- `( S$ T0 Y9 Z$ I! h; u
  46.   1 Q/ v6 F, @0 u( A+ V. a
  47.             //  写入数据并关闭文件      Q+ c" L. g3 ], j* }! X6 {7 F' J
  48.             book.write();   8 }. o. f" L1 B9 U; v- D
  49.            book.close();   
    ! N) p# Z! _; @- k. [
  50.   
    6 I( T3 t  b  ?9 `9 t" O
  51.        }   catch  (Exception e)   {   ; n$ g- @, J( F# K
  52.            System.out.println(e);   
    5 H5 v( F. V4 A+ P' g
  53.        }   
    7 s- @  h5 i2 A* E% K, `2 [7 g, _
  54.    }   
    0 e8 d6 f( F/ P" f' Y* W
  55. }   
    4 \" x/ o7 k. y& |4 c7 J9 X. n
  56. # t6 D+ T8 k% H. ]" [
  57. 6 ?1 K$ S: Q- N9 M

  58. 2 ?+ ^5 S3 H+ c) e
  59. (2)读Excel文件8 {& B& ^) S+ M$ d0 ~

  60. : G7 v, y6 u( j" k7 m, O

  61. * d. ~6 h1 `( _" j2 h# P$ B, E9 ~
  62. package readxls;
    0 ~3 n, ^. s# Q% e' F& Z

  63. ! H1 f$ R; @9 V3 J' ^
  64. //读取Excel的类    * s" D8 m6 c% w! J( _9 u
  65. import  java.io.File;   $ v* u/ J$ I( T2 j& H2 s
  66.   , \& L% I0 i* t! f- v) c- ~* }% H
  67. import  jxl.Cell;   
    $ h, w! W' i4 ^+ R8 W3 S
  68. import  jxl.Sheet;   , H' o& P3 |1 ^& V. ^9 ]' b: P
  69. import  jxl.Workbook;   + |9 V' Y- D( W5 |0 ^3 |+ e+ o1 P
  70.   & ^- I" k$ H8 ?+ S% k1 {. X- ]
  71. public   class  ReadXLS   {   
    ) \+ F4 T# ]; @4 V* K
  72.     public   static   void  main(String args[])   {   # w" Z) D- H0 f0 B$ j0 @& T
  73.         try    {   6 `9 Q: k6 P1 Y* }" h* _6 u0 G, j
  74.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   : H1 ?0 Q/ j7 {5 g8 U8 F0 T
  75.             //  获得第一个工作表对象    3 X2 {, G6 b5 ?  q/ y: _" O
  76.             Sheet sheet  =  book.getSheet( 0 );   / z4 I' `/ |- H, E- T
  77.             //  得到第一列第一行的单元格   
    ! {, o" }" A9 `' k
  78.             Cell cell1  =  sheet.getCell( 0 ,  0 );   
    5 V* K9 T0 `/ C/ s
  79.            String result  =  cell1.getContents();   
    ' \; Z5 v+ m5 T" r* R7 f2 R
  80.            System.out.println(result);   
    % k8 {& E. p. m' E
  81.            book.close();   
    4 e: t, t. L5 O. J0 d5 `6 g
  82.        }   catch  (Exception e)   {   
    1 t  b/ s, w# h! }; ^
  83.            //System.out.println(e);   
    ; _# h" F3 y0 C0 N& @: I- x
  84.         e.printStackTrace();
    2 E4 d$ ~& _# d+ `
  85.        }    & G* }! i) b$ J, A, d: M
  86.     }    % L  f) T; O0 o
  87. }
    ! a# f+ ]# d1 ]: {

  88. ! b4 x1 I% t) t# x7 V$ K  X) f) V$ v; G- M
  89. % U  q) p/ u3 g, y: D2 Y  Y7 b% o- K
  90. + k* s9 d6 K7 m) k/ c, x

  91. ! S0 q8 m) r6 q5 y
  92. (3)合并单元格、格式化单元格等
    , A- ^, x. z7 h$ m

  93. ' r& M- Y- ~: W  D$ h# T# U% o8 l% e
  94. ' Z7 g3 e% u& A: Z  C: U/ {/ S
  95. //合并单元格并在单元格中输入内容# y3 g7 p, Q7 K/ r0 o
  96. 5 s! m: K  ]& a! Q  }+ n
  97. package additionalproperty;
    " @! ?! K- {; P
  98. ' ^& v$ O+ w* T
  99. import java.io.*;
    6 B& s3 Q$ _' p/ v. k; h
  100. import jxl.write.*;
    - w$ V# ]1 C/ n. k$ m
  101. import jxl.*;
    ! f1 `! }, D! a1 E* F9 p) w' c
  102.   ?" E2 n$ k! n" n8 G9 _8 n
  103. public class MergeCells {" g4 v7 s$ X2 L; m1 ^, y
  104. public static void main(String [] args){
    . N) X# N2 Z, B# O9 i% R
  105.   try{" W* n; a1 c% {9 `
  106.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    9 j3 l9 B* u4 m) E3 M; d
  107.         WritableSheet sheet = book.createSheet("第一页", 0);
    8 g; K4 ~7 F" `' ^! G9 A4 j5 J) n
  108.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    : t) e* ?2 _# P! V! `
  109.    
    4 t! |5 F1 _- n2 L8 [
  110.         //设置填充内容的格式
    ! B: i& T" T: n* g- A7 D
  111.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);0 @1 H, B/ d; g+ B# C
  112.         WritableCellFormat format = new WritableCellFormat(font);
    0 Y0 T" z! V) `+ L
  113.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中. h1 R8 z( V  H/ M
  114.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中" @' {3 r# |4 n2 d2 `
  115.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    3 @/ W8 ~# [5 ~$ P' J  ^4 @
  116.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式; o0 s* ~6 a0 O* _8 f" n
  117.    " a- Z. H* l( \# o6 o
  118.         Label label = new Label(3, 3, "合并", format); //添加内容$ |! ~' ~' M+ }5 X8 o- o  j3 R
  119.         sheet.addCell(label);
    / d" {, Z6 g: f5 l1 f3 d1 i- N
  120.         book.write();7 i5 e+ U$ Q/ p8 |
  121.         book.close();% l$ M9 T6 |  s6 v( Y1 V
  122.   }//end try, `- O, u) u) a- ~$ X9 D) K
  123.       catch (Exception e){
    5 R2 b7 v' G8 m, [
  124.            e.printStackTrace();
    . H" D. \1 r6 t0 ]% b! z
  125.        }0 j! \/ ]% A. X/ X& N+ ?& Z9 v6 i
  126.    }8 N$ ~. p* l0 t) @3 L8 g/ d2 i
  127. }* U; x0 u. X% _+ \4 t( O
  128. ; F/ d& u9 |4 l- y  o
  129. 4 c9 Y- P2 s& m
  130. / t5 a$ [) o/ O0 T
  131. (4)添加图片
    ; N, q2 s/ z4 T9 x6 l

  132. . J6 p4 q, D  m( Z$ H* h1 d1 A- W
  133.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    . [2 T8 X+ ^4 W$ d! I9 M$ [

  134. ' M9 W# d, C7 b& v! m- p
  135. 5 ]3 n4 F1 u$ d; {! y. t  q5 [
  136. //在工作表中添加图片" C) S" m+ K' c

  137. , m0 ]3 }% e) N9 r2 C. ?7 h0 d) k
  138. package handleimage;# _& I8 b8 N% _" @/ K5 m. d( o
  139. * j& \+ h% b: Y- i  k
  140. import java.io.*;
    / R/ Z8 D6 `. E  K* t$ q
  141. import jxl.*;
    % U3 U: u9 Q# A; f) B6 Y
  142. import jxl.write.*;: c/ M+ p( j, x3 K7 a% g# _
  143. 2 b* m3 J3 P' P# O
  144. public class CreateImage {
    , w! c8 i* l6 R; C. W
  145. public static void main(String [] args){. q& Y0 b/ u* a- m% P! \
  146.   try{1 K8 W9 ?- U  }3 u- q( u
  147.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    ! F% j2 S9 m9 z: m
  148.        WritableSheet sheet = book.createSheet("第一页", 0);
    ; E3 x5 {7 p8 _" y8 {
  149.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
      C9 l6 V1 L' b/ S) H+ l+ T" j  G% g
  150.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    0 F0 ]" f9 u) u6 q, y& d' p7 i
  151.        sheet.addImage(image);  //添加图片
    . S) S. o, p+ Z; W. q3 @4 b
  152.    
    % C4 f' ?" S- S( p5 m+ g$ ]& i+ m( _
  153.        book.write();
    ; U' [8 j7 d8 r5 a7 B8 F' M, `
  154.        book.close();8 u3 h4 \! i  `/ x8 W3 n: s
  155.       }//end try
    4 W- f' B- D# v  p- C, S; K" `
  156.       catch (Exception e){ e.printStackTrace(); }+ R: W$ @5 @9 H: ?) J* E# H% ~
  157.    }
    2 Y! l6 }" Z7 b' u7 k& B
  158. }* T9 n5 u; f. a% H/ t
复制代码

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




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