数学建模社区-数学中国

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

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

  2. ; |! f& U: H2 V" m) A
  3.         1、环境配置2 f3 c6 v3 c: K5 B# I

  4. 3 E# O5 ]7 E9 g. R5 I
  5.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html2 q7 r3 ^$ i  w

  6. 7 R2 M: W6 ?6 s
  7.         下载完成的包解压之后,可以得到如下几个重要的文件:
    4 G4 Y1 H9 y& F) |; W. C
  8. 3 m# x+ }0 Z& W: s
  9.        (1)jxl.jar  —— JExcelAPI 函数库;& `0 H- ?) D3 {5 m4 M, l6 Z3 V9 E

  10. * s- @* C8 j% x' b0 L# M
  11.        (2)docs  ——  帮助文档;
    1 {4 a( {/ [3 g" q
  12. 3 l8 B1 W. e8 F" @; [& B
  13.        (3)src     ——  源码文件夹;
    3 u* s$ j8 ]8 ~- z7 k/ _
  14. 2 ^1 {1 g8 W& ?0 R- H, H
  15.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。+ ?0 L" y- j& x+ q
  16. ; k) M5 `% ~/ n1 i. ^  m, w
  17.         2、Excel基础操作实例
    / {+ o" M# U+ _- d$ P

  18. ) B: |7 {/ v& @% w2 s. d# E
  19.         (1)  创建Excel文件   
    $ c! O* y2 M" n1 j

  20. % K3 e1 B3 T$ ~, u5 ^0 q1 u
  21.   /**读取Excel文件的内容   9 k4 y9 \; O  b5 C- Y  p2 m
  22. * @param file  待读取的文件   
    ' y6 q; L2 `0 t: i
  23. * @return   // 生成Excel的类    */
    - i. c- ~' p' ~( T
  24. package createxls;
    ) J- t& S1 M7 x+ I/ Q

  25. 6 y7 }) o9 t- b
  26. import  java.io.File;   & f6 h4 L$ A# l% s% q8 S$ ?
  27.   ( T; H( p: ?4 A( i5 d8 a" w
  28. import  jxl.Workbook;   
    " O, e4 v1 g4 g; Z3 H
  29. import  jxl.write.Label;   
    $ q' A' u. q3 y; P
  30. import  jxl.write.WritableSheet;   * w, |; f  q3 r- h) Z* N
  31. import  jxl.write.WritableWorkbook;   
      }* J( d4 }6 Y7 f
  32.   ! c4 Z# D$ J* D% g2 I  Q6 |
  33. public   class  CreateXLS {   + a- V  S* c4 z
  34.     public   static   void  main(String args[])   {   
    9 L+ H5 T' K. Y/ N: z1 o
  35.         try    {   / B) E  @9 T5 ?# P1 @% ~' T
  36.             //  打开文件    " m  X) J: C$ Q
  37.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   8 _  l9 f$ K- E5 j$ X* k# ]2 v5 d
  38.             //  生成名为“第一页”的工作表,参数0表示这是第一页   
    * c" ^  z0 D  H) i- [& D; s
  39.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   ( G  @5 @, |8 _+ B, M# e$ m. u
  40.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   
    . L! S. m7 J3 |2 W* d6 t- O4 N
  41.             //  以及单元格内容为test   
    ( Z% L4 ~2 E; ?8 o' Z4 J' Z
  42.             Label label  =   new  Label( 0 ,  0 ,  " test " );   , [: g$ g  M( g6 n6 Q. }6 _
  43.   
    7 `7 J: B; e' t: M/ H
  44.             //  将定义好的单元格添加到工作表中   
    7 H% [; x9 v; O2 u( ^+ u
  45.             sheet.addCell(label);   & C; |. \5 ?" x
  46.   3 [5 s6 J0 ^# A8 {2 L
  47.             //  写入数据并关闭文件   
    $ I3 h/ H: f- F! n0 H
  48.             book.write();   
    ) y  @3 a1 J9 p, L! g
  49.            book.close();   
    % o( t* X% O8 S/ a5 `/ T8 S' p
  50.   
    ! k/ X5 r/ B9 W- E" M. H
  51.        }   catch  (Exception e)   {   
    " _2 ~) w! Q4 ~5 w4 T( E$ Z' M, m
  52.            System.out.println(e);   
    + B9 [  g  o6 B7 e: ?4 e
  53.        }    ( ~3 O, @9 `3 _  N3 T: \
  54.    }   
    & p% M5 n7 g) u) d9 x( {
  55. }   
    - r$ V6 O2 u& |3 u0 A

  56. 1 H: T, E5 [9 ^! Q; P$ L: j+ R# [. v% Y

  57.   Z) J, C! G4 e, l. O, d6 q
  58. ; g9 x1 h  B2 Y0 |, k8 o- D4 U3 n
  59. (2)读Excel文件( a( L9 s% O3 _: [
  60. # z9 J+ v$ g& H% z
  61. + `) J8 h5 F  P/ E9 n: l, U
  62. package readxls;, k  Q  O: x4 \4 `+ M5 r
  63. 0 _% I5 _3 Z- ]- w' n# i! Z
  64. //读取Excel的类   
    + n$ H3 x8 [7 W6 P" T2 V- v+ V. z  o
  65. import  java.io.File;   
    # R: M# c0 c. N* ~% S
  66.   
    . x3 ^( a9 B% Q' _$ d. ]" K
  67. import  jxl.Cell;   # C* h  r8 U6 c0 W7 x- P# _
  68. import  jxl.Sheet;   $ g3 c3 h' }# l7 u9 _
  69. import  jxl.Workbook;   ! c1 l; l6 p9 u3 E
  70.   5 e. q5 }  i% b
  71. public   class  ReadXLS   {   % m* U$ ^3 C6 w2 c: j
  72.     public   static   void  main(String args[])   {   
    5 O4 a) n8 J+ e# O, e( R  n
  73.         try    {   9 _3 [6 ^8 L+ t+ W" H! L3 a" _1 J
  74.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   " o. t6 R- R" J- m- v: o
  75.             //  获得第一个工作表对象    ) c/ R, i8 F8 C% p/ p+ b! A1 h
  76.             Sheet sheet  =  book.getSheet( 0 );   
    ' o& _) I8 `9 i/ }! @) l6 c
  77.             //  得到第一列第一行的单元格    % H* s. V( _" Z9 q
  78.             Cell cell1  =  sheet.getCell( 0 ,  0 );   ' G0 \  ^. ]; q! t9 q1 T
  79.            String result  =  cell1.getContents();   
    ( P% R, q9 J% B7 |( F3 {- E; ~! E/ m
  80.            System.out.println(result);   
    ! T" t6 |6 E% H  g' c
  81.            book.close();   / z3 [7 l, M& O% s/ W( q
  82.        }   catch  (Exception e)   {   7 |" f4 T1 l. S/ x2 j7 i
  83.            //System.out.println(e);   : n$ ^# s: a' p' d
  84.         e.printStackTrace();
    , X" H3 t! k' @0 D' Y3 R5 h
  85.        }   
    4 f- ]2 J" ?5 C+ E2 H( F( W. _
  86.     }    ; D/ [; P7 t% ^/ Q5 Q# G6 c
  87. }
    : C/ G& n) J+ U9 B$ p
  88. ' g% s; I( H! ~+ e1 P  P( l

  89. & R# E; X% K/ e- d1 w
  90. 0 G; w7 |' z6 P# S* n! ]7 ^
  91. ! a% c/ B' y& ?
  92. (3)合并单元格、格式化单元格等
    : B: q) x1 Q7 e4 ~0 B3 B9 K5 j( L

  93. ) s7 b1 f9 S6 W; Q) V, F/ K
  94. " y7 a$ o2 O7 A# E2 w! O
  95. //合并单元格并在单元格中输入内容
    2 f7 I5 J0 k3 k

  96. : [, x  O. t$ h8 c0 v
  97. package additionalproperty;
    0 c  `5 Z. ?( a5 N8 S

  98. " r5 d( H; W# f7 g! `! |2 {+ q' t! }
  99. import java.io.*;. P- H& [1 b( _! l' H8 h
  100. import jxl.write.*;
    ( {8 j' \5 {2 k  v; K
  101. import jxl.*;8 E& b5 a, ~6 r$ j) j
  102. ! o( U1 D8 t) F: D3 K" Z4 P
  103. public class MergeCells {
    / c8 `- n; a; {
  104. public static void main(String [] args){. B: Q+ r, u4 q0 K
  105.   try{; I2 W! F/ F! Q- X! Y; U
  106.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));! L( A/ r2 l/ L- M) X
  107.         WritableSheet sheet = book.createSheet("第一页", 0);9 T7 d. P) w. _% F) W$ u
  108.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    ) o7 X  M7 w# }8 r5 j) u% M
  109.    
    0 q' C7 ~/ t( P( w; t, h
  110.         //设置填充内容的格式9 M& S4 ?, s7 }, L
  111.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);; ^! o: q5 R) G' E  q0 c
  112.         WritableCellFormat format = new WritableCellFormat(font);# S7 ]+ g' f' x1 D9 V9 Y
  113.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中
    : i3 }3 o9 `) R0 G7 F) U4 _+ |
  114.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中
    2 i3 N3 p# O& Z- Z
  115.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    # w* P" g5 g# o  g
  116.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式) ?, c3 ~% }$ M8 m
  117.    ) r7 E3 [- j" {( t
  118.         Label label = new Label(3, 3, "合并", format); //添加内容3 x6 [! B: b' l( j$ ~& a. K
  119.         sheet.addCell(label);
    9 j6 Y5 _' l4 i- V+ Q. m' n
  120.         book.write();
    1 Y1 {% p8 [- g, c  o4 x! k4 {; S
  121.         book.close();
    4 x$ T0 N8 W+ ~1 ?8 C9 R( Q
  122.   }//end try
    0 z2 F( w0 i7 @, w3 i/ @9 I1 r
  123.       catch (Exception e){
    " b0 T1 h1 u! P1 m9 y7 d5 P' }
  124.            e.printStackTrace();
    - L! ?' Z# T2 r
  125.        }
    ( {. m5 {1 K2 s* g
  126.    }6 ^* O8 v" C6 h8 H6 q
  127. }0 @) g  n/ l1 l7 F

  128. ) b; U# i. i. W5 d
  129. 4 y& Y- c$ _1 H  u- O6 P# {
  130. 0 A& V8 H; E3 c0 w( _# X
  131. (4)添加图片. _$ [& e1 |8 ]( T+ V/ \" z
  132. 0 ^! ]( C0 `4 }
  133.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    * r" ^' S9 Z/ W& u
  134. " R4 g& S6 T6 u/ ^
  135. ; @% @4 b1 X8 [; V9 G% Y
  136. //在工作表中添加图片
    , M6 ]8 s5 B. j' A( x

  137. ( A1 f, o; q! V% \
  138. package handleimage;
    5 n% N  T+ O0 _  b6 [2 a, G
  139. # K6 ?2 E( A2 P
  140. import java.io.*;9 l- C/ r; A# x$ I: q: z. O9 ^
  141. import jxl.*;) K) y  U( A' N
  142. import jxl.write.*;, P* S$ ?" l/ |. @
  143. - g2 Y4 z1 X  S) j, X
  144. public class CreateImage {
    # t- `# G  b* D$ L' q% y
  145. public static void main(String [] args){$ @, l8 c4 P; K: d
  146.   try{
    # Y3 J6 I" M) W8 b: P1 b
  147.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    0 z! z) v# D- i+ J& K
  148.        WritableSheet sheet = book.createSheet("第一页", 0);
    5 b  o: ~7 e, q0 M/ H$ s
  149.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    9 ^! E6 j0 m7 c8 O4 S+ u7 G. w
  150.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    % L4 M# @9 q. o; H9 M
  151.        sheet.addImage(image);  //添加图片3 N2 v' n, P$ t! Q
  152.    & W1 |/ K. R8 o7 F) r
  153.        book.write();
      O# e& S' J0 L0 F# j  P# l
  154.        book.close();
    ' x7 K1 R, B  x5 y5 K+ Y" }
  155.       }//end try
    7 L$ v# r3 ~3 f' ?" f
  156.       catch (Exception e){ e.printStackTrace(); }
      A+ t. r: b! n/ ^$ W. @9 G' C  ^
  157.    }
    & u3 n( {) I# O8 [# m8 @8 `
  158. }4 ^" x. O" s2 o* j6 }
复制代码

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




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