数学建模社区-数学中国

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

作者: wangzheng3056    时间: 2013-8-9 11:28
标题: 【转】Java操作Excel方法详解
  1.   JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。
    3 b9 t4 y, r  k/ X' Q
  2. 0 r3 r3 P* t" l. W% v
  3.         1、环境配置3 N( m$ f& F, c% f5 \9 ~7 \9 {
  4. * F) }+ d* \- e9 |  }( `% w
  5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    ) _% s8 ?! b& o2 J( M, Z

  6. 7 W+ B1 T0 b/ ^, F  q8 X
  7.         下载完成的包解压之后,可以得到如下几个重要的文件:7 j& m8 n4 w' @+ ?8 q  n4 i
  8. 6 R( t' x4 w" [8 ~% o" l
  9.        (1)jxl.jar  —— JExcelAPI 函数库;6 T# b5 e; ^+ ?. U5 A
  10. 2 `1 D& g, b8 {- E7 ]
  11.        (2)docs  ——  帮助文档;4 h) O% A/ s/ A) i. c
  12. 0 S+ c- a2 V( i; H
  13.        (3)src     ——  源码文件夹;
    * T4 D- u8 m$ F

  14. ) P( F$ M& e6 w5 O) I6 J" Y8 X8 ~
  15.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    9 s/ v, _6 U* {

  16. , f# c% [6 t1 j: d
  17.         2、Excel基础操作实例
    0 ?+ k9 e+ Q( K: E3 q: @

  18.   r6 B9 X- ]- K" G
  19.         (1)  创建Excel文件    : D& T7 R( O- I& [2 Q

  20. 7 g+ _6 C' }  l0 e' @  e
  21.   /**读取Excel文件的内容   ) G$ h3 s- ?' I+ c
  22. * @param file  待读取的文件   
    * ~- Q  |  r7 e  \1 u  W3 j2 E1 j
  23. * @return   // 生成Excel的类    */& p3 l" |) b+ F5 ]: n
  24. package createxls;
    ' H8 H2 _% W( M# |4 _+ H
  25. % Y! Y$ m1 b( w3 ?0 \; R
  26. import  java.io.File;   
      S3 u! R; m. O* g, U
  27.   
    . T3 f: ~. m4 T+ q- R  f4 g
  28. import  jxl.Workbook;   
    , Z( i+ Q$ C  \# g! _+ N
  29. import  jxl.write.Label;   
    5 x: ]4 W4 E  c9 b
  30. import  jxl.write.WritableSheet;   
    # b7 m" D0 p1 @5 ^9 K- ~
  31. import  jxl.write.WritableWorkbook;   
    / T: @" ~, t8 h1 j
  32.   : x& g5 _% l+ X  H' B& a
  33. public   class  CreateXLS {   3 S5 D- H) O2 E0 b5 i" V$ A
  34.     public   static   void  main(String args[])   {   1 k8 e1 y2 R' V; u- f: b& {
  35.         try    {   ) D) e$ x( x: x6 p# f6 l  _
  36.             //  打开文件    9 m- ?' d1 m! z/ u
  37.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   - {+ y/ I: r( V  i
  38.             //  生成名为“第一页”的工作表,参数0表示这是第一页    . ^. C" b5 n1 m* E) y, Z( |
  39.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   + c5 T; t0 A) ^5 n
  40.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    ! L* h: q: q; K: J- [2 B
  41.             //  以及单元格内容为test   
    7 i- y& D0 P( \9 z7 e5 U+ Y
  42.             Label label  =   new  Label( 0 ,  0 ,  " test " );   6 ]2 g, E; c- W$ |' }& i. R
  43.   8 `0 B2 V% H( S% O- K
  44.             //  将定义好的单元格添加到工作表中    . e/ _9 X. x% ^( V3 J
  45.             sheet.addCell(label);     U! y6 B$ g/ r8 ?# |5 \
  46.   3 c6 a; M) M* v
  47.             //  写入数据并关闭文件    2 f: Z: ~- H. M$ w' g) x
  48.             book.write();   
    / f; }  {  f- I6 O
  49.            book.close();   
    5 K$ y3 }; s) K
  50.   
    1 g) m3 \, i6 ?
  51.        }   catch  (Exception e)   {   + @8 t- X8 q, |. q
  52.            System.out.println(e);   & ]: {+ O; K# X: b% y
  53.        }    ( s$ m5 s6 m  y7 l. d& w* D. {
  54.    }    ' a! o; e% l. R! X4 \
  55. }   
    ! Y9 A8 C) B5 K% u4 U" t/ Q% l

  56. 4 e5 w4 h) ~$ p
  57. + M& R8 Q8 n4 y. ^

  58. 9 X" e4 |2 [8 [4 n
  59. (2)读Excel文件+ c! C' k. b3 I' @8 c" d/ O) |

  60. 0 T. ?5 t, C  \
  61. % S- A3 J4 ^/ r& o
  62. package readxls;/ A" {# k+ o4 o! W$ p" ]% C! _
  63. 7 y2 M. J% x- J3 W: y% X
  64. //读取Excel的类   
    ! M# [5 _8 t- p, I$ P' N
  65. import  java.io.File;   
    ( m! q2 m- a" A0 a; F! T9 i
  66.   
    5 [0 L9 X, H* k, `5 Y
  67. import  jxl.Cell;   % w8 Y2 A& |* H- ?# O- J
  68. import  jxl.Sheet;   
    . D. Y5 J. J  U$ z
  69. import  jxl.Workbook;   
    4 h) M- m  q. t* d' J! C, S
  70.   
    5 u; G: u; l9 [) W) X9 q
  71. public   class  ReadXLS   {   
    : {; u; T" ~/ j' G/ d4 U" |3 g
  72.     public   static   void  main(String args[])   {   ; q5 }4 i& s, u6 ?: ]& u. t5 p5 m
  73.         try    {   
    . E% T9 k0 v2 y" C# X" \3 @
  74.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   
    3 b/ Y" W- W# v4 K
  75.             //  获得第一个工作表对象    6 |. F3 B. [1 }9 B" ~
  76.             Sheet sheet  =  book.getSheet( 0 );   
    9 |8 y& v* m  U! @3 h
  77.             //  得到第一列第一行的单元格   
    7 k4 R1 h) U8 E  e7 X7 H/ G
  78.             Cell cell1  =  sheet.getCell( 0 ,  0 );   ' _% _% X3 X7 V8 V9 I' A
  79.            String result  =  cell1.getContents();   
    ; r1 o0 Q, L8 X
  80.            System.out.println(result);   9 L- j6 i3 W0 q$ U8 s
  81.            book.close();   
      s/ @& P# W/ Z& V% c
  82.        }   catch  (Exception e)   {   
    9 |& W- V8 M$ o; |( E( Y
  83.            //System.out.println(e);   # @4 K* X6 Y$ k, M, z. {! e
  84.         e.printStackTrace();# x% P: W9 u; I4 E
  85.        }   
    . }5 C) z3 x9 M3 X
  86.     }   
    6 D" F" E  N" S" \8 z
  87. }- `+ a9 G/ s% I3 F! C
  88. 1 {* k1 l* Y9 G) v
  89. * n9 T, L4 g, D' m' b3 s2 n4 J
  90. ' d' v7 U2 M1 c
  91. 2 x, S! J, Q9 T* N
  92. (3)合并单元格、格式化单元格等
    2 x2 M7 Y0 z: e. j! }3 x: \  U

  93. % V; ?) j# W# L3 O4 A
  94. : E- U5 R5 V; \6 b
  95. //合并单元格并在单元格中输入内容
    " Y4 C8 V5 i+ [: K2 @% {& W
  96. , ~+ D" V. E5 X3 B
  97. package additionalproperty;# v" X% u: t1 f* M4 d5 F
  98. % F) W8 t/ k, c1 i7 H. U3 _
  99. import java.io.*;
    9 g: ?2 \* ]8 l7 e  y
  100. import jxl.write.*;  n  `/ T% d& |) d( @
  101. import jxl.*;# W7 P  P% }$ `3 R& |3 p& e
  102. * r/ p2 {( f! a3 i& m5 O, ^
  103. public class MergeCells {
    ( t" _% e! k$ r+ W1 w" ~
  104. public static void main(String [] args){
    ; n; i/ t+ {$ j; E7 R
  105.   try{) |% \& O1 \( B- h) I
  106.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    : L9 C  N+ g: A  W8 M
  107.         WritableSheet sheet = book.createSheet("第一页", 0);
    % e( F4 I7 t8 u1 w
  108.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    8 y% Z! L( E- |* v: w/ C8 O
  109.    
    % P! Q  S0 ^! C3 X5 @0 P
  110.         //设置填充内容的格式- \" d9 U1 v% K5 e' j
  111.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);; j0 s% j8 F% M4 J' B5 X
  112.         WritableCellFormat format = new WritableCellFormat(font);1 h& B; J. [4 e. k* O
  113.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中, }0 q# {0 \+ t6 z9 D
  114.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中: E$ j$ H+ t$ m; N
  115.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式. _6 F3 e3 R3 F8 y* ~( Y9 a
  116.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式# R4 e9 j% C6 F3 E; E, J) m
  117.    / f+ S* Z% I! S6 _- K, j
  118.         Label label = new Label(3, 3, "合并", format); //添加内容* J! u2 G4 K" g. [) j
  119.         sheet.addCell(label);9 W% L3 h! _' B
  120.         book.write();
    9 l3 d7 [: m) Z  o- z! M& ~
  121.         book.close();6 O" Y$ U0 W9 s5 l0 B, {4 \, U9 X0 U
  122.   }//end try6 w& Q# h9 v* G" M- _% P2 H
  123.       catch (Exception e){9 L! ]; G# k3 J" O: o
  124.            e.printStackTrace();( ?! L7 h- d$ E* j7 O
  125.        }
    % S" R2 ~0 [) g/ j6 i3 _& o* ?
  126.    }
    ) J7 V* t2 w# a1 \
  127. }% w8 a0 V+ }  q( e7 M! ~
  128. 6 K* m5 _9 W- K! \& x0 ~" {

  129. ( l- j: @& X+ R, W6 `1 M. i/ F
  130. ! n# h9 U; t# _1 I5 i0 B4 e
  131. (4)添加图片8 q# f2 |9 T1 K$ a! J
  132. / O. u, ^) t3 ~/ x" R
  133.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。. G+ M; I9 p. b2 {. P
  134. 0 Q, R' }! T8 x
  135. 3 i( @3 K3 U, a9 g7 E
  136. //在工作表中添加图片
    2 g  S( ^/ I! o# k4 A
  137. % o4 i/ C2 D- n# z* Y+ |8 o/ e
  138. package handleimage;: y  V) q) X- U* i' O9 u

  139. 1 F4 U% n6 ~! F6 Y2 |
  140. import java.io.*;
    ; R) \8 q! l& r; J# R  X; y# ~
  141. import jxl.*;
    5 o( G2 G" V6 D1 W
  142. import jxl.write.*;
    9 {/ ?) I! K; Q4 Y/ e# o2 @  a6 O

  143. % t' Q' U$ k' D' e' T1 t
  144. public class CreateImage {
    " `% x& ]/ N2 W( [" {% W# q% v3 E
  145. public static void main(String [] args){& U! ?7 `% H3 J$ d6 c- ?4 M  C
  146.   try{
    - G# `* X3 d4 i0 ?
  147.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));5 {7 o+ `) b2 L' ~/ f+ p
  148.        WritableSheet sheet = book.createSheet("第一页", 0);: G4 q+ B4 B) {, k
  149.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式1 @  N$ B' i0 U9 ^& V
  150.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    : D( z$ [# G4 n, B- s! k; n( ]
  151.        sheet.addImage(image);  //添加图片
    8 j4 w5 v+ S) |( J
  152.    
    7 }& E4 l1 S( K7 P1 Q8 w9 l
  153.        book.write();3 g/ E8 I8 }. ~' {( o; p
  154.        book.close();
    , @; P1 Q- e/ }4 H. P* D
  155.       }//end try/ `: [0 w" w$ H8 t- t. e$ p9 e/ d
  156.       catch (Exception e){ e.printStackTrace(); }% [7 r1 p7 k! k3 M; G" C! K' J
  157.    }4 \1 r7 d# }& A9 P; H$ Q+ S9 w$ r
  158. }
    , ]" m  a( K) ^/ X9 J9 R2 x
复制代码

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




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