QQ登录

只需要一步,快速开始

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

【转】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的使用方法。
    2. 6 R: g* m* M6 |3 ^  Z# y/ H) G
    3. - V& j) G* u* q( U! M
    4.         1、环境配置
    5. 6 J9 u0 [$ H) E* U; w3 g  a  Z* [
    6. 7 V- R  [) j% ?! v+ w: V( v
    7.          如下网址,可以下载到API:http://www.andykhan.com/jexcelapi/download.html
    8. ( \# x, z$ a: c0 Z/ P
    9. # \7 m( {7 _8 @( I
    10.         下载完成的包解压之后,可以得到如下几个重要的文件:
    11. ; ?, H) |! p; k3 x! v

    12. / I% a9 z\\" I0 C
    13.        (1)jxl.jar  —— JExcelAPI 函数库;1 J5 O7 \8 z: T& Z- T* G7 {
    14. , g% w' T8 @! @$ e
    15.        (2)docs  ——  帮助文档;
    16. . @\\" T. R8 g9 M. Y
    17. 3 s7 t5 b) [, K4 X; x8 [
    18.        (3)src     ——  源码文件夹;5 a  T# T\\" M4 E. M  j* L4 d; l- x
    19. ( [\\" i* Y5 {5 c5 A1 m3 r, w
    20.          将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面,在CLASSPATH变量里面添加"%JAVA_HOME%\jre\ext",然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”,则可能是没有设置成功。这时,如果有Eclipse开发工具,可以在"Build Path"中添加"External Library",找到jxl.jar的路径,然后就能编译成功了。
    21. \\" u0 P; v\\" `+ U' [
    22. + p; U4 N. \. K1 {1 e
    23.         2、Excel基础操作实例% Z) L! c. ~% _\\" `1 F
    24. ! T# ]; n9 T0 ]7 ?7 R3 t6 K4 v
    25.         (1)  创建Excel文件    ' E, R: g! I2 b7 w0 G( a
    26. ) I& a\\" }# r# s5 o* L
    27.   /**读取Excel文件的内容   
    28. ! a4 |+ x! {; u; P5 b$ y
    29. * @param file  待读取的文件   ; x* P6 h! q$ \. C: P* ~$ G( ?
    30. * @return   // 生成Excel的类    */
    31. 1 u) g7 E' ?\\" Z+ [6 F
    32. package createxls;1 j$ i* }$ V9 l1 v$ s0 y
    33. + \/ \. ?. k4 a& ^) L3 {2 U2 Z5 ^
    34. import  java.io.File;   2 h# q/ K* E6 J: h$ I9 n/ o
    35.   
    36. 8 V  \4 r% l9 z! B) k+ y. s: T: l! ?
    37. import  jxl.Workbook;   3 t5 G/ ^( ~- Z8 f
    38. import  jxl.write.Label;   2 ], n& a& S; b2 F5 v
    39. import  jxl.write.WritableSheet;   7 x* i% ^4 K( e- _% B
    40. import  jxl.write.WritableWorkbook;   - o( k9 C1 G, `
    41.   
    42. % w* s: y* F+ U, |6 c/ D: C- r' G/ j
    43. public   class  CreateXLS {   
    44. 1 I: R# k% r9 V  J
    45.     public   static   void  main(String args[])   {   $ C; h\\" Z/ A6 c  ^7 W1 R* L\\" j4 K
    46.         try    {   \\" R% F* R9 c3 o0 r
    47.             //  打开文件   
    48. + ?$ i7 E) s  a' z( ^2 p2 I
    49.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   $ b% R7 c- i7 a3 i/ R* D6 s6 Z
    50.             //  生成名为“第一页”的工作表,参数0表示这是第一页   
    51. , m8 q! ~/ H7 X' c. J
    52.             WritableSheet sheet  =  book.createSheet( " 第一页 " ,  0 );   
    53. \\" D\\" a8 p- |/ ?/ @( d5 D) k2 u
    54.             //  在Label对象的构造子中指名单元格位置是第一列第一行(0,0)   / G6 l! m4 j4 I5 @
    55.             //  以及单元格内容为test   
    56. \\" [2 u2 D/ ], M. E, A8 O! }! u
    57.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
    58. / l( e* p  o  |7 W  o4 k# e0 b' q% W1 \
    59.   1 N) ]' `$ `\\" S+ v0 F7 P0 V
    60.             //  将定义好的单元格添加到工作表中    + p: v% l: h/ d: Y  n: e$ R
    61.             sheet.addCell(label);   
    62. 2 I$ h* p: s  |) l
    63.   ; F+ Z( a! |2 U* w- g
    64.             //  写入数据并关闭文件    ' k& h* S4 \  v1 M, m
    65.             book.write();   
    66. 3 X5 M/ d* b0 ^) V# q
    67.            book.close();   
    68. ! p$ a+ X  o1 N\\" g: A
    69.   
    70. 4 X. e5 x7 Y# F2 T8 V
    71.        }   catch  (Exception e)   {   : t) y7 J4 |8 `& \  y
    72.            System.out.println(e);   / t3 K; r# B# J  k0 H
    73.        }    3 Q+ S, R; s1 c/ j
    74.    }   
    75. & H- E8 }\\" t$ o6 p$ O3 E\\" J
    76. }   
    77. $ l. s) y* T- f1 ^+ p( l8 a
    78. . K4 e& d: B. D. p' a  g
    79. 8 l# p3 f6 O# c, s\\" [  y7 x

    80. 8 Z2 r% Z7 v\\" V) k; I: ?- i: ~. w+ M5 J
    81. (2)读Excel文件- B8 {( \# H/ m2 @* n3 n: M0 j# i
    82. * L8 w2 K6 [; [% k9 Q0 g3 a

    83. 5 a( l  v7 C  e3 g; @- D
    84. package readxls;6 p  F, _& H( ]! S+ C& C
    85. * e7 A7 I: B5 B4 s5 Z0 Z# R4 n
    86. //读取Excel的类    ' K# X0 r7 q: S  e1 u3 D3 e& J( e& }
    87. import  java.io.File;   
    88. ; v) L1 ?6 [\\" M2 t  }% O# M9 Y
    89.   ! X3 j3 Y, \  J
    90. import  jxl.Cell;   + H& }* e6 {) Q- `$ `& T, ~) C
    91. import  jxl.Sheet;   : J& O# x\\" B1 {\\" p! g
    92. import  jxl.Workbook;   7 f\\" n. [+ e  X\\" a7 h! Z# c
    93.   
    94. / }3 C0 G0 r+ Q\\" P7 g\\" E9 Q+ ?) s: x# M
    95. public   class  ReadXLS   {   / o% q* H2 v- C# U
    96.     public   static   void  main(String args[])   {   
    97. ( f( g. T\\" A- t. C( J
    98.         try    {   + b; N7 h1 c5 t: G- K
    99.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   
    100. / Q4 o9 T7 d  L0 w) }4 W. y% @0 F
    101.             //  获得第一个工作表对象    5 Z* k. Q' b2 Y4 f3 q- z# J
    102.             Sheet sheet  =  book.getSheet( 0 );   : \( o/ Z, ~0 B& C1 N
    103.             //  得到第一列第一行的单元格   
    104. , z1 X0 V3 a0 B0 a\\" L
    105.             Cell cell1  =  sheet.getCell( 0 ,  0 );   ) N: O! M6 L! ?6 X\\" F5 a: u
    106.            String result  =  cell1.getContents();   9 q) u9 R- ]6 U; g3 f2 f
    107.            System.out.println(result);   
    108. ! n- _: @  Q6 S
    109.            book.close();   3 }: g4 m0 {/ Y# A- n5 k& n
    110.        }   catch  (Exception e)   {   
    111. ) Q/ ]& B$ n\\" ^6 u, x# r
    112.            //System.out.println(e);   0 J2 k& H7 [! C! }\\" x; o$ s
    113.         e.printStackTrace();2 X' M. F8 a5 d
    114.        }   
    115. * J0 Y( w: h; R# v% k3 N
    116.     }    1 O  N. v8 R8 Z6 O8 B
    117. }' s5 D3 h, |( r& k& S

    118. 4 c0 V5 x\\" L& z\\" W3 g6 I

    119. - Y6 s# ^/ H! S9 M% t\\" b

    120. ( f- K3 E\\" s* W5 P7 Y* h
    121. ; s7 v8 I\\" m( w& C7 k
    122. (3)合并单元格、格式化单元格等
    123. & t/ x1 ]* X' N

    124. : C. ^3 r& Q8 m) }  l; M
    125. 0 }  c7 `% P/ S- h5 P+ o+ ~
    126. //合并单元格并在单元格中输入内容
    127. : H9 d  ~1 G) h, W. c8 a

    128. \\" Y6 `1 ]& X2 g2 U1 j4 y* L* h
    129. package additionalproperty;( d, N) F( w( M: O  m: H

    130. # L7 k* p0 }4 V/ d) T7 x
    131. import java.io.*;: O% |' h0 v  e\\" p0 M: v* R& Z
    132. import jxl.write.*;. t, f( [- k- O1 q3 o
    133. import jxl.*;
    134. ) e' ?: E. g0 i
    135. . Q2 \' `6 B) G% K0 `
    136. public class MergeCells {
    137. 1 {0 t  \8 c' Y0 R3 n
    138. public static void main(String [] args){& c+ c1 T5 I% J6 h
    139.   try{) |9 d% |$ c% A& W' i
    140.         WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));/ s  E4 P1 b2 v8 W
    141.         WritableSheet sheet = book.createSheet("第一页", 0);; i, ^2 N& ^& t8 s7 f
    142.         sheet.mergeCells(3, 3, 6, 6);  //合并单元格
    143. ' t  D4 r& J5 I- s$ ~# }, J9 J
    144.    
    145. & B: f7 M\\" |& X\\" X. D
    146.         //设置填充内容的格式' O, m8 G6 I2 F# t
    147.         WritableFont font = new WritableFont(WritableFont.TIMES, 30, WritableFont.BOLD);
    148. $ w$ a4 H8 m; ^- c' S
    149.         WritableCellFormat format = new WritableCellFormat(font);3 v: |* I. Y0 P6 N9 s; A
    150.         format.setAlignment(jxl.format.Alignment.CENTRE);  //水平居中' L- x/ U' s1 [, w1 W  r
    151.         format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  //垂直居中# ]8 y; I, a$ X' t- q
    152.         format.setBackground(jxl.format.Colour.BLUE); //背景颜色和样式
    153. 2 V& p. N2 ?2 N/ r1 M8 x$ P/ b% Q
    154.         format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THICK);  //边框样式
    155. , \% Y6 G0 g/ s; [* o8 A, t
    156.    
    157. 5 @- p6 _* f2 c! ?- `
    158.         Label label = new Label(3, 3, "合并", format); //添加内容  r$ t9 A\\" m: {6 S$ G3 g$ {! }4 R
    159.         sheet.addCell(label);
    160. 4 g- `, ~) E0 [5 C7 }
    161.         book.write();: K7 L- Q3 O0 w  Q
    162.         book.close();% U- k9 E2 v7 u2 Q- i$ s( N) G1 o
    163.   }//end try
    164. % f\\" c: N' U! X! e
    165.       catch (Exception e){
    166. 9 `  T- L6 [5 C0 ?
    167.            e.printStackTrace();6 I6 z1 ^. D  C
    168.        }
    169. 0 }' v4 O7 |, [, F) Z
    170.    }
    171. % r( q! Y( O# B% w6 O* w/ j4 }
    172. }
    173. 3 g2 x0 d0 `9 z( @* P7 v* O) P
    174. - \# Y% ^# _. v; W
    175. * k  F. ?: D# B% T; l0 e

    176. 5 w2 K# s  D7 M
    177. (4)添加图片9 ^4 L) z/ S# U  M1 {# I

    178. ; R3 }1 W$ e/ ^: U  O
    179.      JExcelAPI对图片的操作有限:它不能生成图表、图片和宏,但是复制工作表时,这些信息可以保留复制。而且当向工作表中添加图片时,只能支持PNG格式的图片。
    180. . d4 s3 P3 O5 F1 c, z% L( }! x) j' a

    181. ; b! a\\" S& k\\" z$ X
    182. 9 h( ^+ K! p! B7 C$ H7 j$ e
    183. //在工作表中添加图片
    184. 0 n2 `: M1 v, J; r0 e: }, g* j5 Q

    185. $ A0 b- ~: y& @0 a/ q
    186. package handleimage;
    187. $ s' P! }- |  c1 ]

    188. % c( }% J+ h7 r) t- {0 @) a4 B4 l
    189. import java.io.*;
    190. 0 ], W3 [: T: K2 W0 p
    191. import jxl.*;
    192. ( u! t( Q  a: h( o/ g: I+ g
    193. import jxl.write.*;7 H; V  ?, L0 ~
    194. ) Q8 O' ]1 X# O8 p5 e  _5 a3 V* ~2 _
    195. public class CreateImage {2 j\\" k2 z. ]5 x7 A! G3 a  j3 F1 }
    196. public static void main(String [] args){; p7 N- q\\" g  n) i3 G4 G
    197.   try{
    198. ' N4 ~7 I4 B$ W! N: K
    199.        WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
    200. + c, y4 X& _/ Z5 g4 {4 x5 K/ ]5 g
    201.        WritableSheet sheet = book.createSheet("第一页", 0);
    202. & C7 y9 N( P\\" q5 V- J; L3 {1 F* f
    203.        WritableImage image = new WritableImage(3.5, 3.5, 4.3, 8.7,  //定义图片格式
    204. 0 r( U4 V; w: D- w
    205.        new File("C:\\Documents and Settings\\Wei Li\\My Documents\\My Pictures\\Water lilies.PNG"));3 h0 m: v) C4 P* e' \$ \\\" M; n$ a
    206.        sheet.addImage(image);  //添加图片
    207. \\" c( c$ t' e: i( O: j
    208.      X$ s0 k8 ]2 p* i2 W5 J. d
    209.        book.write();4 Q9 Q8 ]: o- T5 Z# q( P/ [
    210.        book.close();- p8 m; o8 w4 y/ B0 b. s2 I: W6 _
    211.       }//end try$ Z0 c: |0 m# l; {4 F& i
    212.       catch (Exception e){ e.printStackTrace(); }' K* j5 C! f9 |5 y
    213.    }9 f1 k! b) I8 Q; S' E! z
    214. }
    215. ' d) {! m9 Q& E9 O# E4 |: @, v# p
    zan
    转播转播 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    guoaecg        

    0

    主题

    5

    听众

    252

    积分

    升级  76%

  • TA的每日心情

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

    [LV.5]常住居民I

    自我介绍
    想学数学
    回复

    使用道具 举报

    3#
    无效楼层,该帖已经被删除
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-20 12:49 , Processed in 1.361890 second(s), 67 queries .

    回顶部