QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2425|回复: 1
打印 上一主题 下一主题

【转】Java操作Excel方法详解

[复制链接]
字体大小: 正常 放大

937

主题

117

听众

3万

积分

升级  0%

  • TA的每日心情

    2020-10-25 11:55
  • 签到天数: 264 天

    [LV.8]以坛为家I

    自我介绍
    内蒙古大学计算机学院

    社区QQ达人 金点子奖 助人为乐奖 风雨历程奖

    群组2013年数学建模国赛备

    跳转到指定楼层
    1#
    发表于 2013-8-9 11:28 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    1.   JAVA 通常有两种方法来操作Excel,分别是POI和JExcelAPI,而且都是开源的。POI是Apace公司开发的,对中文的支持比较弱一些;而JExcelAPI是韩国公司开发的,不仅对中文的支持好,而且由于是纯JAVA编写的,所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。# V/ s9 z6 _$ s/ t( k
    2. 9 u) m; w- f+ b$ J7 n0 L/ {5 d
    3.         1、环境配置
    4. + A+ K2 I8 `' Y. d4 M, U1 K  V
    5. 5 |' q5 a. r/ S! R0 G\\" e
    6.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    7. ) {0 k* Y& c4 ?, I; M

    8. / K) U# {% d3 S4 A0 R
    9.         下载完成的包解压之后,可以得到如下几个重要的文件:
    10. 7 b3 b6 J) M! w; w. S

    11. ( e  i( T4 F, \0 O# Q
    12.        (1)jxl.jar  —— JExcelAPI 函数库;& k6 i/ e9 Z( Y% ]- s

    13. 5 [/ U0 D4 X) o9 B4 C1 [8 d9 E; z
    14.        (2)docs  ——  帮助文档;
    15. - {7 z1 l1 x$ w2 g& ?. \

    16. * e4 D$ j7 u$ B5 x, |6 c
    17.        (3)src     ——  源码文件夹;
    18. ! }: Y3 `  c* y% }

    19. \\" Z7 M: P) U% @1 x
    20.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。7 q: q# W8 o0 V- {

    21. * q3 S\\" O* M7 Q6 i
    22.         2、Excel基础操作实例* A2 \2 ?7 D; p$ Y5 r; |! H: R& ]1 T
    23. ! j  D8 [; }; z$ P5 i, C% I& T
    24.         (1)  创建Excel文件   
    25.   D6 r+ A\\" b4 l\\" a* y( e% \7 s
    26. ( l( c2 W  D, W0 U
    27.   /**读取Excel文件的内容   
    28. 0 Z: e( w3 v! w& \$ u- A' X
    29. * @param file  待读取的文件   0 C0 l( p; D9 h. A0 t
    30. * @return   // 生成Excel的类    */
    31. 7 H+ L7 x2 c* g' }5 _% e# i
    32. package createxls;
    33. - o* s7 z9 X8 s3 @4 Y
    34. : r; t1 r5 e& N7 K- l5 ]
    35. import  java.io.File;   
    36. 7 S7 Y- D* Q$ o9 h* z2 H) N
    37.   9 d* P+ o* R9 T  P: c5 F
    38. import  jxl.Workbook;     T& ?( Y\\" B/ @; k1 h
    39. import  jxl.write.Label;   \\" d+ u' X' O5 E1 @, Q9 H
    40. import  jxl.write.WritableSheet;   
    41. - R, |+ X+ U: w9 s/ y5 Q
    42. import  jxl.write.WritableWorkbook;   , ~* t8 v2 s, F+ D1 b
    43.   
    44. ) M+ X& L1 |) y! z9 [5 h- |6 T
    45. public   class  CreateXLS {   / X. n4 P' K/ k( O% q# Y, p2 Z
    46.     public   static   void  main(String args[])   {   
    47. \\" D5 T- L+ _' p2 c, ^% g1 ?
    48.         try    {   
    49. ; }: e3 Q& ?% v) `9 Z3 ~+ n
    50.             //  打开文件    9 A. Q+ F) a7 {4 }
    51.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   
    52. 6 j' `! S  @& V
    53.             //  生成名为“第一页”的工作表,参数0表示这是第一页    0 u9 R- l  ?; Q, r2 k+ F3 d' v
    54.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   ! j\\" m  d7 C$ F5 h: S( j& z
    55.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   ' g, e; A/ @) }, N$ ~+ u- w
    56.             //  以及单元格内容为test   
    57. & U9 X\\" V. G0 Y2 X, k
    58.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    59. ! C, `/ C* l8 t5 Z
    60.   
    61. % M  C1 r# K9 C' b! Z
    62.             //  将定义好的单元格添加到工作表中   
    63. \\" f% W: \3 b2 k$ P% @/ T
    64.             sheet.addCell(label);   0 o* p$ T$ O$ h0 A, F: I
    65.   3 y: s0 x0 ]: L0 D' }\\" w
    66.             //  写入数据并关闭文件      _8 d( E\\" |) S( G
    67.             book.write();   
    68. 0 F* d6 G  L( a9 N6 b\\" o+ m8 n- E
    69.            book.close();   , m2 q6 ^8 x5 J1 Z* Q( [7 x# J: G
    70.   
    71. % }( m/ P2 q1 u\\" b. j# C8 V6 y0 N2 Z
    72.        }   catch  (Exception e)   {   / \, O- {4 o9 w; o9 j8 F4 _1 W8 L
    73.            System.out.println(e);   
    74. 8 H3 F& b7 T0 I. ^+ @4 W; Y( R
    75.        }    ) v. {3 p& U7 G$ P5 A
    76.    }    2 p; m1 L2 h! {/ h  [7 g2 d6 s' y: z
    77. }   
    78. 3 T0 y% x* j% X' w
    79. ( G* o0 o2 I4 `3 n$ i! O8 V# Q; O- P
    80. 2 _! _+ F+ M; l/ q' O2 C7 B
    81. * ?! r\\" ?- t- _% o( ?7 k, v+ ?\\" B
    82. (2)读Excel文件
    83. 0 C% m6 p8 o0 x: S+ l
    84. 4 i$ l& [1 F4 b7 j

    85. . {8 n/ `0 Y# c% r
    86. package readxls;
    87. : \6 l+ \- E* E* e$ x& ~
    88.   L0 H4 w6 u4 t& N; T- ], Q/ z+ X
    89. //读取Excel的类    - L, s  _; r+ ^4 p
    90. import  java.io.File;   
    91. 1 m& m- ]: Q- Q6 N: H- }+ M
    92.   \\" V/ s* e$ J, Y( p* B' a
    93. import  jxl.Cell;   * ]4 v- r* l: G2 o. V0 F
    94. import  jxl.Sheet;   
    95. 3 g3 \\\" K* B$ \
    96. import  jxl.Workbook;   
    97. 9 @2 x, {( v, N9 u* c8 k8 Q
    98.   * ?- c2 y, H! m6 M
    99. public   class  ReadXLS   {   
    100. 8 `9 w4 o1 Y6 }2 f6 o# l! G* E3 p
    101.     public   static   void  main(String args[])   {   
    102. $ t. m2 d: I& R7 u+ u# Z
    103.         try    {   
    104. 9 f! E0 h* U\\" W\\" i8 U$ c' v\\" J, D
    105.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   * F\\" C- R) n- B$ C! L
    106.             //  获得第一个工作表对象   
    107. $ e+ u, G: p1 d, u
    108.             Sheet sheet  =  book.getSheet( 0 );   3 L, y3 {6 e! Y# t  s9 r
    109.             //  得到第一列第一行的单元格    - B8 f% d4 r\\" B( _' }# |
    110.             Cell cell1  =  sheet.getCell( 0 ,  0 );   - b$ I) R  w) e3 E; o3 k
    111.            String result  =  cell1.getContents();   
    112. ( M  k( T- }& z; J1 L  H
    113.            System.out.println(result);   9 r8 N& |: g6 m; f
    114.            book.close();   
    115. \\" E! X' y% O5 ~\\" s8 F\\" [
    116.        }   catch  (Exception e)   {   + w+ Z% \( z0 q, W' U* p
    117.            //System.out.println(e);   
    118. ; K# B& ]: u0 m- T# U4 U6 M' r$ ~0 J
    119.         e.printStackTrace();
    120. 8 S7 A* M: A, `( e# T( X
    121.        }   
    122. / z% T3 n* i0 I+ Q5 C- K\\" o
    123.     }   
    124. 1 P* u- Q5 _4 E% c, e- u7 i
    125. }- z  u4 S- e+ C! t8 Y' X

    126. - o# T2 e3 e5 g0 n5 l& {! d
    127. ' h. U3 S& `6 I- M5 C% G$ ]
    128. 0 k% e\\" l0 x4 P' p

    129. \\" b; }& J+ P% ]( w3 |
    130. (3)合并单元格、格式化单元格等
    131. 2 K6 I& z' N& Q7 u4 Q% ^

    132. \\" F- b7 P- m1 Y3 h! t! P! L1 n
    133. 5 e% M1 f\\" h0 Q2 d. T* F1 M
    134. //合并单元格并在单元格中输入内容
    135. 6 k7 [, F. D; w

    136. 3 w' a/ ]8 j, |
    137. package additionalproperty;% P8 \! d3 m1 v

    138. \\" `- g3 C- p& s& J7 s
    139. import java.io.*;
    140. 1 _/ b+ ^- u* A7 D1 U0 c2 A5 w
    141. import jxl.write.*;5 D( y- I5 Z9 K0 }+ F( y
    142. import jxl.*;% v' y\\" }0 K+ V5 Y

    143. ! b  r$ c4 b- N/ F1 J, [
    144. public class MergeCells {
    145. ! D7 U. X' E  ]2 O\\" b% b
    146. public static void main(String [] args){
    147. / j0 F; g+ h% E+ p% L
    148.   try{+ j5 R0 V& {& a! B9 _/ \
    149.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));; D: e2 f0 v  e% D4 w  p% F
    150.         WritableSheet sheet = book.createSheet("第一页", 0);7 V; o% C6 v& r# q2 Q6 Q( \
    151.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格\\" `\\" b2 j- D' S1 T$ N
    152.    
    153. 6 E- e2 I$ v* A& O
    154.         //设置填充内容的格式
    155. 0 i/ S& i! d5 j- `3 e; D
    156.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);8 @  ~; N2 G5 C$ ]
    157.         WritableCellFormat format = new WritableCellFormat(font);3 f; T) \8 K\\" K
    158.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中
    159. & W0 P: L0 r1 T8 r4 B; _& M3 b# Y2 \
    160.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中& F1 j+ Y+ K2 \, j4 P
    161.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式% y3 u7 Y$ a4 ]4 b% L/ o
    162.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式8 M7 x6 a7 @4 d
    163.    
    164. ; k6 F  ]. Q! R, Y
    165.         Label label = new Label(3, 3, "合并", format); //添加内容  e5 Z: p\\" c) `4 L, i% u8 {
    166.         sheet.addCell(label);) T3 ]6 H2 p+ I8 s  M5 \9 L% _
    167.         book.write();. |# U- ?/ \) @# u; O: o3 |) X
    168.         book.close();# b  t2 |% X( h* k6 U; W
    169.   }//end try* Z$ l, H9 W9 [
    170.       catch (Exception e){- O( O2 r+ Z* {
    171.            e.printStackTrace();
    172. $ N% L6 l9 B; j. f( q
    173.        }
    174. 5 l1 }8 [; t7 m9 F: X) n0 N; n
    175.    }% q! Q5 |/ z. A* h! \( G% ]
    176. }( B\\" Z1 H4 [) o# T3 M2 W2 W

    177. , \: [0 D* _4 r; {! L: Z' O* z* v
    178. : B/ k3 I2 ?2 l1 n; x# s6 m
    179. 1 [; k4 p% F4 a5 C) }
    180. (4)添加图片8 [+ y) i( X5 x9 i, R6 {1 h( X
    181.   G: z- ^- d  C# j
    182.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。0 O5 i1 K, W/ p  l; T4 V
    183. - T' d) n9 b& `  g$ G% C

    184. \\" w* X; E( e! u4 E7 @
    185. //在工作表中添加图片
    186. 3 B$ c. t# y/ Y  T7 n8 ?8 p
    187. 7 A9 h6 L! p7 k9 W/ N: i7 W
    188. package handleimage;
    189. , \' A; m  R7 ^+ ?$ y3 S0 m3 r; `
    190. ' x& |% I# c$ w7 b/ L! W7 Y
    191. import java.io.*;3 \  r: c9 J+ p2 i
    192. import jxl.*;* m% u6 g: @, J* Q. Q
    193. import jxl.write.*;
    194. , }4 O: J\\" P\\" o; F5 a& l% J0 s- N

    195. 8 D6 z/ p( c% O
    196. public class CreateImage {) l4 I+ p0 i9 `4 U- M' {
    197. public static void main(String [] args){
    198. ! _\\" N3 |! ~; O* }
    199.   try{
    200. \\" ?, Y; V' t2 O9 ?& m\\" V
    201.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    202. 1 O9 d0 z1 @; k8 |/ x3 e5 Z6 S
    203.        WritableSheet sheet = book.createSheet("第一页", 0);/ U1 k1 f5 l' l) d2 `# A
    204.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式1 P7 P9 [+ l# @5 U& J4 K
    205.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));
    206. 1 j8 L. Q* c& r7 U! t# C7 I( [
    207.        sheet.addImage(image);  //添加图片) D' x) I. L9 K9 b! M
    208.    
    209. + g% B8 Q& V  D' V& s6 d
    210.        book.write();
    211. # W# p: O, K; W% t/ I; N  b) I$ W
    212.        book.close();
    213. $ _3 |' D% e4 \  b- x/ O
    214.       }//end try
    215. * q9 I9 p, o- }2 V
    216.       catch (Exception e){ e.printStackTrace(); }2 U2 f/ Y2 Z! `' j$ o
    217.    }2 c5 X# f% ^* I' a  B3 p! K
    218. }
    219. 2 w5 R# x5 \7 R5 S
    zan
    转播转播 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    guoaecg        

    0

    主题

    5

    听众

    252

    积分

    升级  76%

  • TA的每日心情

    2013-11-18 18:53
  • 签到天数: 53 天

    [LV.5]常住居民I

    自我介绍
    想学数学
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-7-24 13:07 , Processed in 0.617022 second(s), 59 queries .

    回顶部