数学建模社区-数学中国

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

作者: wangzheng3056    时间: 2013-8-9 11:28
标题: 【转】Java操作Excel方法详解
  1.   JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。
    / Z% X& t$ Q# [
  2. + @) |: B' F  H2 n& e
  3.         1、环境配置% x6 x' x3 D. y, W1 H
  4. $ N& I) }! ^- F6 L
  5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html' P: k# v! x3 F8 E" M% P; s
  6. 2 ^! L) A; h) X! u0 {4 ]2 T2 B
  7.         下载完成的包解压之后,可以得到如下几个重要的文件:
    * {7 E- q0 [) F1 y
  8. ! x) S0 s# l$ p' Q& _
  9.        (1)jxl.jar  —— JExcelAPI 函数库;
    - s% ^5 d1 v4 V4 }2 J

  10. . s2 j# j, a. t4 |5 }
  11.        (2)docs  ——  帮助文档;$ |! ]' X' }' F& w
  12. 1 M) G! G$ l7 V' D7 y; ]# H
  13.        (3)src     ——  源码文件夹;1 I/ Q0 y# ~4 c  ~# ?. j

  14. 0 }3 ]! _4 V, @* q
  15.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。( p; u3 G: |# A0 Z2 i

  16.   u/ f# Q/ F) G: b% k
  17.         2、Excel基础操作实例
    - c! l1 `) p& m
  18.   h2 q- I/ h+ _5 P1 ~) j
  19.         (1)  创建Excel文件   
    ! m" j( B+ ~3 M
  20. ' I$ D. B; J. k+ g0 r$ s. y
  21.   /**读取Excel文件的内容   
    / b# l2 [2 E4 {, [0 R5 O/ @
  22. * @param file  待读取的文件   0 o3 o/ S2 Z9 O7 [9 L
  23. * @return   // 生成Excel的类    */
    - c+ t+ r: i" ]: n
  24. package createxls;
    8 W2 \$ @: c# {( i3 ]1 I

  25. ' q" _+ d% R/ k
  26. import  java.io.File;   2 O4 h/ k4 c' e% |
  27.   
    , z4 ^8 I- j. s
  28. import  jxl.Workbook;   
    4 t( d* O3 v' x
  29. import  jxl.write.Label;   
    4 k4 {  ]; j* A4 q0 D* ?6 Q" ^
  30. import  jxl.write.WritableSheet;   
      s% r: F4 G* |1 I
  31. import  jxl.write.WritableWorkbook;   
    6 N8 N/ D8 O$ y* v; F( t
  32.   3 u5 s# [! b2 P# T
  33. public   class  CreateXLS {   + W- y' e# P5 B) U: N7 T
  34.     public   static   void  main(String args[])   {   * x2 y$ P+ N0 ~5 P
  35.         try    {   
    $ }( D* b+ k+ z
  36.             //  打开文件    / B% E3 \1 _! ]- w( `: x4 C
  37.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   3 A4 Q, @/ o! ~
  38.             //  生成名为“第一页”的工作表,参数0表示这是第一页    ; X& Q! V1 `. t7 Y8 _- q0 {
  39.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    / d0 F' l, H5 r  G/ D+ N; d5 p1 G) g
  40.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    0 J: Z. b, X. _
  41.             //  以及单元格内容为test    - N" `9 O9 I$ d7 M5 L
  42.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    0 `6 @  w* N+ f/ [- j' e$ o; P
  43.   ' O& ], f2 d5 N" |$ n. R
  44.             //  将定义好的单元格添加到工作表中   
    4 s8 c9 e2 |. p$ L
  45.             sheet.addCell(label);   ' F" d  S) D/ V9 F# v. h% V
  46.   
    1 }& p& M  A0 R
  47.             //  写入数据并关闭文件   
    4 [' S- N- [; Z
  48.             book.write();   
    " H/ j" Y; d# O6 [
  49.            book.close();   6 G6 p0 Z) G5 R; ^
  50.   
    . \/ H6 Q7 W8 z! R! C1 f7 C. f
  51.        }   catch  (Exception e)   {     i/ E5 d' M2 x6 ?* [# J) x3 j
  52.            System.out.println(e);   
    - ~/ `3 L/ d$ k& g+ l0 z% q) j, D
  53.        }    - H& e6 [: A: k* e  A, ]1 |
  54.    }    ' ]1 V3 X" t" I; u) _# l4 c
  55. }   + r" b$ k3 M9 y2 K8 P$ `
  56.   y4 k- A, r9 |: D+ w, K

  57. 4 [3 y! u& j" h0 F  ?, e7 k9 B

  58. 0 c; H/ B4 F" ^0 [/ D- r. H
  59. (2)读Excel文件
    + C& p0 D5 H5 B& D3 d9 x
  60. 7 T; Z5 P6 \! W% {! j; F( A
  61. . G' x9 Z# v0 H' A" k  w; W# X  z6 s
  62. package readxls;5 D4 r  t! P9 x  G% H
  63. , F$ Y/ Z& ?* B/ ^
  64. //读取Excel的类    0 n! T+ l/ m1 n, f' f" E" Q  K
  65. import  java.io.File;   
    , C& b8 q+ R9 X- x: f/ \! |
  66.   ; \$ E- h' j' R
  67. import  jxl.Cell;   ' O1 d' [0 J7 l+ p
  68. import  jxl.Sheet;   4 L9 z! W5 J) k' ]% W  ^3 U
  69. import  jxl.Workbook;   
    9 g( d; }- j% q" p, w
  70.   
    6 m: }: [' D. v: P4 P
  71. public   class  ReadXLS   {   4 K& t4 b' C" W5 c+ h
  72.     public   static   void  main(String args[])   {   & Y, d' x" T/ h. ~8 N4 f! w- A
  73.         try    {   
    - y: I4 U3 ]2 X6 ^
  74.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   
    ; L: m& n/ r* ~5 f1 ?8 f/ {. E
  75.             //  获得第一个工作表对象   
    ! k7 {7 ?0 z9 {$ L+ s) d
  76.             Sheet sheet  =  book.getSheet( 0 );   
    9 ]! z4 G/ P/ \( @0 i7 X
  77.             //  得到第一列第一行的单元格   
    8 t. |# q. s8 B- m& D
  78.             Cell cell1  =  sheet.getCell( 0 ,  0 );   + V& B" D- G; \& N( Q$ |
  79.            String result  =  cell1.getContents();   
    6 I5 x7 c* f( s+ W
  80.            System.out.println(result);   9 R- U# a. d8 e! M$ H4 w
  81.            book.close();   
    3 G. P% ]$ X, g( e# O% x" p) E
  82.        }   catch  (Exception e)   {   ; @* T9 @5 h) Q# w1 I4 k
  83.            //System.out.println(e);   / b' x' H- M* }5 D6 k
  84.         e.printStackTrace();5 c% `1 a% T$ |4 \
  85.        }    7 {5 k4 q7 F  x; b& q
  86.     }   
    # a+ e& `9 n# P# }' S
  87. }
    0 P( p( q3 G* V* }& ^, ~; N

  88. 5 `9 m2 |0 k9 @" t3 K8 ~, j
  89. . m" h8 U% D' f! v2 P. f' g; b

  90. # s4 K. z3 z. T. A
  91. 3 Z8 k0 X- M' x
  92. (3)合并单元格、格式化单元格等
    ! K7 n5 f# a5 \1 i! C; @: c
  93.   W' R7 \9 Z) j* t8 ]

  94. $ i, R& z7 E  h0 W, o' H/ T6 A
  95. //合并单元格并在单元格中输入内容( t! q. Y; P) @% E8 m
  96. $ F- N& u. M! z' `3 T
  97. package additionalproperty;. f4 i7 B; q9 @
  98. 8 d: F9 T% J' M* |, b
  99. import java.io.*;; p# @- q1 |  \* x; n- v* C/ m
  100. import jxl.write.*;
    + g- w3 l/ F: \# p. N
  101. import jxl.*;, b) G; J( _8 B1 s' u1 o: m% n3 \
  102. $ X3 @, Q  A4 k) i* h
  103. public class MergeCells {; I! M# T2 q1 ]" }7 f. g5 p
  104. public static void main(String [] args){
    8 P# X7 O7 T" O9 d$ W
  105.   try{
    / |" T# f* K- w% K5 N
  106.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    + a# d  G1 z& h: n# C& R! R" M  C
  107.         WritableSheet sheet = book.createSheet("第一页", 0);) u- ]3 P) T( G$ ^
  108.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    2 ~0 q0 ?4 N( g% _! U7 |  _
  109.      m' z2 L) x) ]+ q. [3 D
  110.         //设置填充内容的格式% `, ]  e7 `+ ]' D. v0 I. f3 u" v
  111.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);* W! U- K) I. t6 k: K0 ?; X
  112.         WritableCellFormat format = new WritableCellFormat(font);
    * T* L8 k; v$ [* k. r/ u9 H
  113.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中, [: f" z1 s, n  l8 L* c0 `
  114.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中
    ' e, t4 u% V* S/ X& \" Y' o: e& U' b
  115.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式4 b- V1 S5 w& l0 o
  116.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式$ h4 `4 R; ]+ v3 E; ~) `! T% B
  117.    
    % q4 r! H2 `4 E' ]$ f8 U
  118.         Label label = new Label(3, 3, "合并", format); //添加内容2 z! J$ S0 q2 e+ Z5 i1 @
  119.         sheet.addCell(label);
    9 r' p6 X, Y9 q) f/ r2 U, c
  120.         book.write();
    . t' |; S  g/ d! Y" c. ?( N  G
  121.         book.close();* Y2 \4 u, M9 H! P% y' b
  122.   }//end try' `1 j0 S8 v, ^- c4 r. ^+ ?2 t
  123.       catch (Exception e){' c$ g" h0 }! z8 v+ B' c
  124.            e.printStackTrace();) g7 h( e8 t# h# T4 V7 f  A
  125.        }# t$ G" [: l; ~9 d3 l( P2 n- p
  126.    }
    ! y8 U% _4 \/ @$ p! A" v
  127. }' f# h* E5 _! D/ V0 m$ M- \6 o
  128. 0 |- }; I+ H; L  l# X

  129. + h8 X. c. E# b$ }( t5 B
  130. + S$ Z& ^8 I) \! z; C1 D7 B1 b
  131. (4)添加图片
    0 S3 i3 ?5 F) s# E0 c9 n8 h

  132. 2 l( V, e; Z% A0 d9 ?+ G
  133.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    0 u8 k" ~  m0 [6 N+ E
  134. ( i6 W7 h# x6 T6 i/ H
  135. 0 J- @8 ]. h' l7 G: s+ x
  136. //在工作表中添加图片1 ^: M4 J( B: o: f2 Q
  137. ! T/ Q/ p) T$ p0 J/ c9 E: {& j: e' S
  138. package handleimage;
    1 @- Z9 T' W* U* L
  139. . L- m! k) V# S9 ?* V0 z/ I) l, @
  140. import java.io.*;3 L1 h1 O( ~# t# f' b: s4 l+ @
  141. import jxl.*;
    - h' C7 M; b8 i( ]
  142. import jxl.write.*;
    , [/ Y+ ^8 }7 c$ q
  143. 1 ~0 y( R, |: L) V! j1 s
  144. public class CreateImage {5 f" y% B. |; X
  145. public static void main(String [] args){/ `3 M: N6 [8 V9 H9 x( f
  146.   try{
    ) \- W! R! }! o! G' a- p! e
  147.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));, i; b  W/ W- M2 R8 W9 I9 I
  148.        WritableSheet sheet = book.createSheet("第一页", 0);3 e" y4 x- l" c7 @
  149.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    # E/ ]2 c; i3 v+ N' G8 u
  150.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));  @' c; F" d" |" b% E: Q
  151.        sheet.addImage(image);  //添加图片
    8 K) z- P* g4 v1 d
  152.    5 V  K# m5 j8 [5 H; j: d( ~
  153.        book.write();( I5 B$ p5 P. u' Q, y' u: v
  154.        book.close();
    3 w6 J) |8 J8 \: T/ S6 [
  155.       }//end try9 S4 F% @1 C; E6 |9 m
  156.       catch (Exception e){ e.printStackTrace(); }
    ) {  L! U; n5 S: y) F% v8 b- Y
  157.    }
    " v' h$ Q# r; H5 W
  158. }
    4 o2 Z4 J" q: m+ S
复制代码

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




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