﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-清睛仪明-文章分类-Java</title><link>http://www.blogjava.net/msmary/category/26458.html</link><description>书山有路勤为径，学海无涯苦作舟</description><language>zh-cn</language><lastBuildDate>Wed, 09 Jan 2008 18:15:15 GMT</lastBuildDate><pubDate>Wed, 09 Jan 2008 18:15:15 GMT</pubDate><ttl>60</ttl><item><title>详细介绍在tomcat中配置数据源原理(转)</title><link>http://www.blogjava.net/msmary/articles/174135.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Wed, 09 Jan 2008 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/msmary/articles/174135.html</guid><wfw:comment>http://www.blogjava.net/msmary/comments/174135.html</wfw:comment><comments>http://www.blogjava.net/msmary/articles/174135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/msmary/comments/commentRss/174135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/msmary/services/trackbacks/174135.html</trackback:ping><description><![CDATA[<div id="article">
<p><font face="Times New Roman">前言<br />
　本文根据实例详细介绍了如何在tomcat中配置数据源。网上此类文章很多，但是基本都是雷同的，而且对一些特殊问题以及原理并未详细阐述，所以想根据自己的实际经验，并结合例子写一篇详细的文章。<br />
　本文是偶的一些拙见，有不正确的地方请大家多多评论指正。<br />
开发环境<br />
&nbsp;　本文的环境：JDK1.4.2，TOMCAT5.0.28，Oracle9i<br />
JDBC简介<br />
&nbsp;　提到数据源，那就不能不说JDBC。JDBC是Java Database Connectivity的缩写。在java.sql包中提供了JDBC API，定义了访问数据库的接口和类。但是JDBC API不能直接访问数据库，必须依赖于数据库厂商提供的JDBC驱动程序，即JDBC DRIVER。<br />
Java.sql中常用的接口和类如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Driver接口和DriverManager类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PreparedSataement<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet<br />
1&nbsp;&nbsp;&nbsp;&nbsp; Driver接口和DriverManager类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DriverManager类用来建立和数据库的连接以及管理JDBC驱动程序，常用方法如下：<br />
方法&nbsp;描述<br />
registerDriver(Driver driver)&nbsp;在DriverManager中注册JDBC驱动程序<br />
getConnection(String url,String user,String pwd)&nbsp;建立和数据库的连接，返回Connection对象<br />
setLoginTimeOut(int seconds)&nbsp;设定等待数据库连接的最长时间<br />
setLogWriter(PrintWriter out)&nbsp;设定输入数据库日至的PrintWriter对象<br />
&nbsp;<br />
2&nbsp;&nbsp;&nbsp;&nbsp; Connection<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection代表和数据库的连接，其常用方法如下：<br />
方法&nbsp;描述<br />
getMetaData()&nbsp;返回数据库的MetaData数据。MetaData数据包含了数据库的相关信息，例如当前数据库连接的用户名、使用的JDBC驱动程序、数据库允许的最大连接数、数据库的版本等等。<br />
createStatement()&nbsp;创建并返回Statement对象<br />
PrepareStatement(String sql)&nbsp;创建并返回prepareStatement对象<br />
3&nbsp;&nbsp;&nbsp;&nbsp; Statement<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement用来执行静态sql语句。例如，对于insert、update、delete语句，调用executeUpdate(String sql)方法，而select语句可以调用executeQuery(String sql)方法，executeQuery(String sql)方法返回ResultSet对象。<br />
4&nbsp;&nbsp;&nbsp;&nbsp; PrepareStatement<br />
&nbsp;&nbsp; PrepareStatement用于执行动态的sql语句，即允许sql语句中包含参数。使用方法为：<br />
&nbsp;&nbsp; String sql = &#8220;select col1 from tablename where col2=? And col3=?&#8221;;<br />
&nbsp;&nbsp; PrepareStatement perpStmt = conn.preparestatement(sql);<br />
&nbsp;&nbsp; perpStmt.setstring(1,col2Value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perpStmt.setFloat(2,col3Value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = perpStmt.executeQuery();<br />
5&nbsp;&nbsp;&nbsp;&nbsp; ResultSet<br />
　ResultSet用来表示select语句查询得到的记录集，一个StateMent对象在同一时刻只能打开一个ResultSet对象。通过ResultSet的getXXX()方法来得到字段值。ResultSet提供了getString()、getFloat()、getInt()等方法。可以通过字段的序号或者字段的名字来制定获取某个字段的值。例如：在上例中getString(0),getString(col1)都可以获得字段col1的值。<br />
事务处理<br />
　在实际应用中，我们会遇到同时提交多个sql语句，这些sql语句要么全部成功，要么全部失败，如果其中一条提交失败，则必须撤销整个事务。为此，Connection类提供了3个控制事务的方法：</font></p>
<p><font face="Times New Roman"><br />
方法&nbsp;描述<br />
setAutoCommit(boolen autoCommit)&nbsp;设置是否自动提交事务，默认为自动提交。<br />
commit()&nbsp;提交事务<br />
rollback()&nbsp;撤销事务<br />
参考例子：<br />
try{</font></p>
<font face="Times New Roman">
<p><br />
conn.SetautoCommit(false);</p>
<p><br />
stmt = conn.createstatement();<br />
stmt.executeUpdate(&#8220;delete form table1 where col1=1&#8221;);<br />
stmt.eecuteUpdate(&#8220;delete from table2 where col2=1&#8221;);</p>
<p><br />
conn.comm.it();</p>
<p><br />
}catch(Exception e){</p>
<p><br />
e.printStackTrace;</p>
<p><br />
try{</p>
<p>conn.rollback();</p>
<p><br />
} catch(Exception e1){</p>
<p><br />
e1.printStackTrace;</p>
<p><br />
}</p>
<p><br />
}<br />
通过一个JSP例子来访问oracle数据库：<br />
&lt;%@ page import="java.util.*"&gt;</p>
<p><br />
&lt;%@ page import="java.sql.*"&gt;</p>
<p><br />
&lt;%</p>
<p><br />
try{</p>
<p><br />
Connection conn = null;</p>
<p><br />
Statement stmt = null;</p>
<p><br />
ResultSet rs = null;</p>
<p><br />
//加载oracle驱动程序</p>
<p><br />
Class.forName("oracle.jdbc.driver.OracleDriver.");</p>
<p><br />
//注册oracle驱动程序</p>
<p><br />
DriverManager.regidterDriver(new <br />
oracle.jdbc.driver.OracleDriver());</p>
<p><br />
//建立数据库连接</p>
<p><br />
conn=DriverManager.getConnection("jdbc:oracle:thin:@your <br />
db ip:your db port:sid",dbuser,dbpassword);</p>
<p><br />
stmt = conn.createStatement();</p>
<p><br />
rs = stmt.executeQuery("select * from <br />
tablename");</p>
<p><br />
while(rs.next){</p>
<p>out.print(rs.getstring("colname"));</p>
<p><br />
}</p>
<p><br />
}catch(Exception e){</p>
<p><br />
}</p>
<p><br />
finally{</p>
<p><br />
rs.close();</p>
<p><br />
stmt.close();</p>
<p><br />
conn.close();</p>
<p><br />
}</p>
<p>%&gt;<br />
&nbsp;<br />
数据源简介<br />
　JDBC2.0提供了javax.sql.DataSource的接口，负责与数据库建立连接，实际应用时不需要编写连接数据库代码，直接从数据源获得数据库的连接。Dataource中事先建立了多个数据库连接，这些数据库连接保持在数据库连接池中，当程序访问数据库时，只需要从连接池从取出空闲的连接，访问数据库结束，在将这些连接归还给连接池。DataSource对象由容器（Tomcat）提供，不能使用创建实例的方法来生成DataSource对象，要采用JAVA的JNDI（Java Nameing and Directory Interface，java命名和目录接口）来获得DataSource对象的引用。（另有一种说法：&#8220;其实从技术上来说，数据源连接方式是不需要目录服务的，我们同样可以通过序列化数据源对象直接访问文件系统。这点是需要明确的。&#8221;感兴趣的朋友可以试试。）JNDI是一种将对象和名字绑定的技术，对象工厂负责生产出对象，这些对象都和唯一的名字相绑定。程序中可以通过这个名字来获得对象的引用。Tomcat把DataSource作为一种可配置的JNDI资源来处理，生成DataSource对象的工厂为org.apache.comm.ons.dbcp.BasicDataSourceFactory。<br />
配置数据源<br />
　配置数据源其实相当简单：<br />
　首先在server.xml中加入&lt;Resource&gt;元素，打开server.xml，在&lt;Context&gt;中加入以下代码（以oracle为例）：<br />
&lt;Resource name="jdbc/ JNDI名字" auth="Container" type="javax.sql.DataSource"/&gt;</p>
<p>&lt;ResourceParams name="jdbc/JNDI名字"&gt;</p>
<p>&lt;parameter&gt;</p>
<p>&lt;name&gt;factory&lt;/name&gt;<br />
&nbsp;<br />
&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;</p>
<p>&lt;/parameter&gt;</p>
<p>&lt;parameter&gt;</p>
<p>&lt;name&gt;maxActive&lt;/name&gt;</p>
<p>&lt;value&gt;100&lt;/value&gt;</p>
<p>&lt;/parameter&gt;</p>
<p>&lt;parameter&gt;<br />
&nbsp;<br />
&lt;name&gt;maxIdle&lt;/name&gt;<br />
&nbsp;<br />
&lt;value&gt;30&lt;/value&gt;</p>
<p>&lt;/parameter&gt;</p>
<p>&lt;parameter&gt;</p>
<p>&lt;name&gt;maxWait&lt;/name&gt;<br />
&nbsp;<br />
&lt;value&gt;10000&lt;/value&gt;</p>
<p>&lt;/parameter&gt;</p>
<p>&lt;parameter&gt;<br />
&nbsp;<br />
&lt;name&gt;username&lt;/name&gt;</p>
<p>&lt;value&gt;用户名&lt;/value&gt;</p>
<p>&lt;/parameter&gt;</p>
<p>&lt;parameter&gt;</p>
<p>&lt;name&gt;password&lt;/name&gt;</p>
<p>&lt;value&gt;密码&lt;/value&gt;</p>
<p>&lt;/parameter&gt;</p>
<p>&lt;parameter&gt;</p>
<p>&lt;name&gt;driverClassName&lt;/name&gt;</p>
<p>&lt;value&gt;oracle.jdbc.driver.OracleDriver&lt;/value&gt;</p>
<p>&lt;/parameter&gt;</p>
<p>&lt;parameter&gt;</p>
<p>&lt;name&gt;url&lt;/name&gt;<br />
&nbsp;<br />
&lt;value&gt;jdbc:oracle:thin:@ip:端口:sid &lt;/value&gt;</p>
<p>&lt;/parameter&gt;</p>
<p>&lt;/ResourceParams&gt;<br />
&lt;Resource&gt;元素的属性如下：<br />
属性&nbsp;描述<br />
name&nbsp;指定Resource的JNDI的名字<br />
auth&nbsp;指定管理Resource的Manager，由两个可选值：Container和Application。Container表示由容器来创建和管理Resource，Application表示由WEB应用来创建和管理Resource。如果在web application deployment descriptor中使用&lt;resource-ref&gt;，这个属性是必需的，如果使用&lt;resource-env-ref&gt;，这个属性是可选的。<br />
type&nbsp;指定Resource所属的java类名<br />
&lt;ResourceParams&gt;元素的属性如下：<br />
属性&nbsp;描述<br />
name&nbsp;指定ResourceParams的JNDI的名字，必须和Resource的name保持一致<br />
factory&nbsp;指定生成DataSource对象的factory的类名<br />
maxActive&nbsp;指定数据库连接池中处于活动状态的数据库连接最大数目，0表示不受限制<br />
maxIdle&nbsp;指定数据库连接池中处于空闲状态的数据库连接的最大数目，0表示不受限制<br />
maxWait&nbsp;指定数据库连接池中的数据库连接处于空闲状态的最长时间（单位为毫秒），超过这一事件，将会抛出异常。-1表示可以无限期等待。<br />
username&nbsp;指定连接数据库的用户名<br />
password&nbsp;指定连接数据库的密码<br />
driverClassName&nbsp;指定连接数据库的JDBC驱动程序<br />
url&nbsp;指定连接数据库的URL<br />
&nbsp;<br />
其他文章说以上配置就OK了，对于web.xml的配置可有可无，其实不是这样子的。如果在web应用中访问了由Servlet容器管理的某个JNDI Resource，则必须在web.xml中声明对这个JNDI Resource的引用。表示资源引用的元素为&lt;resource-ref&gt;,该元素加在&lt;wepapp&gt;&lt;/ wepapp &gt;中。</p>
<p>&lt;resource-ref&gt;</p>
<p>&lt;descryiption&gt;DB Connection&lt;/descryiption&gt;</p>
<p>&lt;res-ref-name&gt;jdbc/JNDI名字 &lt;/res-ref-name&gt;</p>
<p>&lt;res-type&gt;javax.sql.DataSource &lt;/res- type&gt;</p>
<p>&lt;res-auth&gt;Container &lt;/res-auth&gt;</p>
<p>&lt;/resource-ref&gt;<br />
&lt;resource-ref&gt;元素的属性如下：<br />
属性&nbsp;描述<br />
description&nbsp;对所引用的资源的说明<br />
res-ref-name&nbsp;指定所引用资源的JNDI名字，与&lt;Resource&gt;元素中的name属性保持一致<br />
res-type&nbsp;指定所引用资源的类名字，与&lt;Resource&gt;元素中的type属性保持一致<br />
res-auth&nbsp;指定所引用资源的Manager，与&lt;Resource&gt;元素中的auth属性保持一致<br />
　到这里，数据源就已经配置成功了。但是我在测试的时候除了一点小麻烦，主要原因是对DataSource的概念没搞清楚。我是这么测试的，写一个测试类，然后在eclipse中进行junit测试，捕获的异常为： <br />
　javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial。 <br />
　同样的代码在JSP文件中正常运行，后来翻了一些资料，终于找到了问题的所在了。原来DataSource是由容器（TOMCAT）提供的，所以我的测试会抛出异常。为了再次验证想法是否正确，在jsp文件中import刚才抛出异常的类，在进行连接数据库，结果一切正常。 <br />
　下面的例子是实际应用中使用DataSource，在jsp文件中连接oracle。<br />
&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt;</p>
<p>&lt;%@ page import="java.sql.*"%&gt;</p>
<p>&lt;%@ page import="javax.naming.*"%&gt;</p>
<p>&lt;%@ page import="javax.sql.*"%&gt;</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD <br />
HTML 4.01 Transitional//EN"&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;%<br />
Context initContext = new InitialContext();</p>
<p>Context envContext = (Context) initContext.lookup("java:/comp/env");</p>
<p><br />
DataSource db = (DataSource)envContext.lookup("jdbc/javablogorl");</p>
<p><br />
//javablogorl为&lt;Resource&gt;元素中name属性的值</p>
<p>Connection conn = db.getConnection( );</p>
<p>Statement stmt = conn.createStatement();</p>
<p><br />
ResultSet rs = stmt.executeQuery("SELECT * FROM blog_systemadmin");</p>
<p>while(rs.next()){</p>
<p>out.print(rs.getString("admin_name")+" ");</p>
<p>out.print(rs.getString("admin_password")+"&lt;br&gt;");</p>
<p>}</p>
<p>rs.close();</p>
<p>stmt.close();</p>
<p>conn.close();<br />
%&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;<br />
另:tomcat5.5的配制方法为:<br />
&lt;Resource name="jdbc/JNDI名字" auth="Container" type="javax.sql.DataSource"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxActive="100" maxIdle="30" maxWait="10000"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username="用户名" password="密码" driverClassName="oracle.jdbc.driver.OracleDriver"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="jdbc:oracle:thin:@ip:端口:sid"/&gt;</font></p>
</div>
<img src ="http://www.blogjava.net/msmary/aggbug/174135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/msmary/" target="_blank">谭明</a> 2008-01-09 23:24 <a href="http://www.blogjava.net/msmary/articles/174135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 泛型的理解与实现</title><link>http://www.blogjava.net/msmary/articles/156202.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Fri, 26 Oct 2007 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/msmary/articles/156202.html</guid><wfw:comment>http://www.blogjava.net/msmary/comments/156202.html</wfw:comment><comments>http://www.blogjava.net/msmary/articles/156202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/msmary/comments/commentRss/156202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/msmary/services/trackbacks/156202.html</trackback:ping><description><![CDATA[&nbsp;
<p style="word-break: break-all"><span style="font-size: 13.5pt; background: white; color: black">很多人不知道Java 泛型是什么意思，现在我就来简单的介绍下他的意思和实现，希望能帮助到大家</span></p>
<p style="word-break: break-all"><strong><span style="font-size: 13.5pt; background: white; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><span style="font-size: 13.5pt; background: white; color: black">泛型是<strong><u><span style="font-family: 宋体"><a href="http://www.bc-cn.net/Article/kfyy/java/Index.html">Java</a> SE</span></u></strong> 1.5的新特性，泛型的本质是参数化类型，也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中，分别称为泛型类、泛型</span><a href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BD%D3%BF%DA"><span style="font-size: 13.5pt; background: white; color: black">接口</a></span><span style="font-size: 13.5pt; background: white; color: black">、泛型方法。<br />
</span><span style="font-size: 13.5pt; background: black; color: black"><br />
</span><span style="font-size: 13.5pt; color: black">　　</span><a href="http://www.bc-cn.net/Article/kfyy/java/Index.html"><span style="font-size: 13.5pt; color: black">Java</a></span><span style="font-size: 13.5pt; color: black">语言引入泛型的好处是安全简单。<br />
<br />
　　在</span><a href="http://www.bc-cn.net/Article/kfyy/java/Index.html"><span style="font-size: 13.5pt; color: black">Java</a></span><span style="font-size: 13.5pt; color: black"> SE 1.5</span><span style="font-size: 13.5pt; color: black">之前，没有泛型的情况的下，通过对类型Object的引用来实现参数的&#8220;任意化&#8221;，&#8220;任意化&#8221;带来的缺点是要做显式的强制类型转换，而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况，编译器可能不提示错误，在运行的时候才出现异常，这是一个安全隐患。<br />
<br />
　　泛型的好处是在编译的时候检查类型安全，并且所有的强制转换都是自动和隐式的，提高代码的重用率。<br />
<br />
　　泛型在使用中还有一些规则和限制：<br />
<br />
　　1、泛型的类型参数只能是类类型（包括自定义类），不能是简单类型。<br />
<br />
　　2、同一种泛型可以对应多个版本（因为参数类型是不确定的），不同版本的泛型类实例是不兼容的。<br />
<br />
　　3、泛型的类型参数可以有多个。<br />
<br />
　　4、泛型的参数类型可以使用extends语句，例如&lt;T extends superclass&gt;。习惯上成为&#8220;有界类型&#8221;。<br />
<br />
　　5、泛型的参数类型还可以是通配符类型。例如Class&lt;?&gt; classType = Class.forName(</span><a href="http://www.bc-cn.net/Article/kfyy/java/Index.html"><span style="font-size: 13.5pt; color: black">Java</a></span><span style="font-size: 13.5pt; color: black">.lang.String);<br />
<br />
</span><span style="font-size: 13.5pt; color: black">　　泛型还有</span><a href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BD%D3%BF%DA"><span style="font-size: 13.5pt; color: black">接口</a></span><span style="font-size: 13.5pt; color: black">、方法等等，内容很多，需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经了解泛型时候写出的两个例子（根据看的印象写的），实现同样的功能，一个使用了泛型，一个没有使用，通过对比，可以很快学会泛型的应用，学会这个基本上学会了泛型70%的内容。<br />
<br />
例子一：使用了泛型</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">package</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> onlyfun.caterpillar;</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">public</span></strong><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">class</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> Gen&lt;T&gt; {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 11pt; color: #3f7f5f; font-family: 宋体">//</span><span style="font-size: 11pt; color: #3f7f5f; font-family: 宋体">定义泛型成员变量</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">private</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> T </span><span style="font-size: 11pt; color: #0000c0; font-family: 宋体">ob</span><span style="font-size: 11pt; color: black; font-family: 宋体">;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">public</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> Gen(T ob){</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">this</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体">.</span><span style="font-size: 11pt; color: #0000c0; font-family: 宋体">ob</span><span style="font-size: 11pt; color: black; font-family: 宋体"> = ob;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">public</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> T getOb() {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">return</span></strong><span style="font-size: 11pt; color: #0000c0; font-family: 宋体">ob</span><span style="font-size: 11pt; color: black; font-family: 宋体">;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">public</span></strong><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">void</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> setOb(T ob) {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">this</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体">.</span><span style="font-size: 11pt; color: #0000c0; font-family: 宋体">ob</span><span style="font-size: 11pt; color: black; font-family: 宋体"> = ob;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">public</span></strong><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">void</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> showType(){</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-size: 11pt; color: #0000c0; font-family: 宋体">out</span></em><span style="font-size: 11pt; color: black; font-family: 宋体">.println(</span><span style="font-size: 11pt; color: #2a00ff; font-family: 宋体">"T</span><span style="font-size: 11pt; color: #2a00ff; font-family: 宋体">的实际类型是:"</span><span style="font-size: 11pt; color: black; font-family: 宋体">+ </span><span style="font-size: 11pt; color: #0000c0; font-family: 宋体">ob</span><span style="font-size: 11pt; color: black; font-family: 宋体">.getClass().getName());</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">public</span></strong><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">static</span></strong><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">void</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> main(String[] args) {</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Gen&lt;Integer&gt; intOb = </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">new</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> Gen&lt;Integer&gt;(88);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; intOb.showType();</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">int</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> i = intOb.getOb();</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-size: 11pt; color: #0000c0; font-family: 宋体">out</span></em><span style="font-size: 11pt; color: black; font-family: 宋体">.println(</span><span style="font-size: 11pt; color: #2a00ff; font-family: 宋体">"value="</span><span style="font-size: 11pt; color: black; font-family: 宋体"> + i);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-size: 11pt; color: #0000c0; font-family: 宋体">out</span></em><span style="font-size: 11pt; color: black; font-family: 宋体">.println(</span><span style="font-size: 11pt; color: #2a00ff; font-family: 宋体">"------------------------"</span><span style="font-size: 11pt; color: black; font-family: 宋体">);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Gen&lt;String&gt; strOb = </span><strong><span style="font-size: 11pt; color: #7f0055; font-family: 宋体">new</span></strong><span style="font-size: 11pt; color: black; font-family: 宋体"> Gen&lt;String&gt;(</span><span style="font-size: 11pt; color: #2a00ff; font-family: 宋体">"Hello Gen"</span><span style="font-size: 11pt; color: black; font-family: 宋体">);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strOb.showType();</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String s = strOb.getOb();</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-size: 11pt; color: #0000c0; font-family: 宋体">out</span></em><span style="font-size: 11pt; color: black; font-family: 宋体">.println(</span><span style="font-size: 11pt; color: #2a00ff; font-family: 宋体">"value="</span><span style="font-size: 11pt; color: black; font-family: 宋体"> + s);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" align="left"><span style="font-size: 11pt; color: black; font-family: 宋体">}</span></p>
<p><span style="font-size: 13.5pt; color: black; font-family: 宋体">例子二：没有使用泛型</span></p>
<p>package onlyfun.caterpillar;</p>
<p>public class Gen2 {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; //<span style="font-family: 宋体">定义一个通用类型成员</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Object ob;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Gen2(Object ob){ private Object ob;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ob = ob;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Object getOb() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ob;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setOb(Object ob) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ob = ob;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void showType(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("T<span style="font-family: 宋体">的实际类型是</span>: " + ob.getClass().getName());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<span style="font-family: 宋体">定义类</span>Gen2<span style="font-family: 宋体">的一个</span>Integer<span style="font-family: 宋体">版本</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Gen2 intOb = new Gen2(99);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Gen2 intOb = new Gen2(new Integer(99));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; intOb.showType();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = (Integer)intOb.getOb();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("value= " + i);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("--------------------");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<span style="font-family: 宋体">定义类</span>Gen2<span style="font-family: 宋体">的一个</span>String<span style="font-family: 宋体">版本</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Gen2 strOb = new Gen2("Hello Gen");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strOb.showType();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str = (String)strOb.getOb();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(str);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p><span style="font-size: 13.5pt; color: black; font-family: 宋体">两个例子运行</span><span style="font-size: 13.5pt; color: black">Demo</span><span style="font-size: 13.5pt; color: black; font-family: 宋体">结果是相同的</span></p>
<p><span style="font-size: 13.5pt; color: black; font-family: 宋体">看明白这个，以后基本的泛型应用和代码阅读就不成问题了。</span></p>
<img src ="http://www.blogjava.net/msmary/aggbug/156202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/msmary/" target="_blank">谭明</a> 2007-10-26 17:29 <a href="http://www.blogjava.net/msmary/articles/156202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JXL操作Excel</title><link>http://www.blogjava.net/msmary/articles/151863.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Wed, 10 Oct 2007 12:45:00 GMT</pubDate><guid>http://www.blogjava.net/msmary/articles/151863.html</guid><wfw:comment>http://www.blogjava.net/msmary/comments/151863.html</wfw:comment><comments>http://www.blogjava.net/msmary/articles/151863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/msmary/comments/commentRss/151863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/msmary/services/trackbacks/151863.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: 10pt; line-height: 150%; font-family: Verdana">jxl</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">是一个韩国人写的</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">java</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">操作</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">的工具</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">,&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">在开源世界中，有两套比较有影响的</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">API</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">可供使用，一个是</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">POI</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">，一个是</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">jExcelAPI</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">。其中功能相对</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">POI</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">比较弱一点。但</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">jExcelAPI</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">对中文支持非常好，</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">API</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">是纯</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Java</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">的，</span>&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">并不依赖</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Windows</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">系统，即使运行在</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Linux</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">下，它同样能够正确的处理</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">文件。</span>&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">另外需要说明的是，这套</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">API</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">对图形和图表的支持很有限，而且仅仅识别</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">PNG</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">格式。</span>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">使用如下：</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">搭建环境</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">将下载后的文件解包，得到</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">jxl.jar</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">，放入</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">classpath</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">，安装就完成了。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">基本操作</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">一、创建文件</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">拟生成一个名为</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">&#8220;test.xls&#8221;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">的</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">文件，其中第一个工作表被命名为</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana"><br />
&nbsp;&#8220;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">第一页</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">&#8221;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">，大致效果如下：</span></p>
<p style="background: #eeeeee; word-break: break-all; line-height: 130%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"><span style="color: blue">package</span> <span style="color: black">&nbsp;test;<br />
<br />
</span><span style="color: green">//</span> </span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">生成</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">Excel</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">的类</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;java.io.File;<br />
<br />
<span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.Workbook;<br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.write.Label;<br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.write.WritableSheet;<br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.write.WritableWorkbook;<br />
<br />
</span><span style="color: blue">public</span> &nbsp; <span style="color: blue">class</span> <span style="color: black">&nbsp;CreateExcel&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: blue">public</span> &nbsp; <span style="color: blue">static</span> &nbsp; <span style="color: blue">void</span> <span style="color: black">&nbsp;main(String&nbsp;args[])&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: blue">try</span> &nbsp; <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">打开文件</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WritableWorkbook&nbsp;book&nbsp;</span> <span style="color: black">= <span style="color: black">&nbsp;Workbook.createWorkbook(</span> <span style="color: blue">new</span> <span style="color: black">&nbsp;File(</span> <span style="color: black">"</span> <span style="color: black">test.xls</span> <span style="color: black">"</span> <span style="color: black">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">生成名为</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">&#8220;</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">第一页</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">&#8221;</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">的工作表，参数</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">0</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">表示这是第一页</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WritableSheet&nbsp;sheet&nbsp;</span> <span style="color: black">= <span style="color: black">&nbsp;book.createSheet(</span> <span style="color: black">"</span> </span></span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: 宋体">第一页</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: black">"</span> <span style="color: black">,&nbsp; <span style="color: black">0</span> <span style="color: black">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">在</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">Label</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">对象的构造子中指名单元格位置是第一列第一行</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">(0,0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green">//</span> &nbsp;</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">以及单元格内容为</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">test</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label&nbsp;label&nbsp;</span> <span style="color: black">=</span> &nbsp; <span style="color: blue">new</span> <span style="color: black">&nbsp;Label(</span> <span style="color: black">0</span> <span style="color: black">,&nbsp;</span> <span style="color: black">0</span> <span style="color: black">,&nbsp;</span> <span style="color: black">"</span> <span style="color: black">test</span> <span style="color: black">"</span> <span style="color: black">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">将定义好的单元格添加到工作表中</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sheet.addCell(label);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">/* <span style="color: green"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span></span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">生成一个保存数字的单元格</span>&nbsp;<span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">必须使用</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">Number</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">的完整包路径，否则有语法歧义</span>&nbsp;<span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">单元格位置是第二列，第一行，值为</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">789.123<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green">*/</span> <span style="color: black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jxl.write.Number&nbsp;number&nbsp;</span> <span style="color: black">=</span> &nbsp; <span style="color: blue">new</span> <span style="color: black">&nbsp;jxl.write.Number(</span> <span style="color: black">1</span> <span style="color: black">,&nbsp;</span> <span style="color: black">0</span> <span style="color: black">,&nbsp;</span> <span style="color: black">555.12541</span> <span style="color: black">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sheet.addCell(number);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">写入数据并关闭文件</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;book.write();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;book.close();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> &nbsp; <span style="color: blue">catch <span style="color: black">&nbsp;(Exception&nbsp;e)&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> <span style="color: black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span> <span style="color: black"><br />
}</span> <span style="color: black"><br />
</span></span></span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">编译执行后，会产生一个</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">文件。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">三、读取文件</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">以刚才我们创建的</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">文件为例，做一个简单的读取操作，程序代码如下：</span></p>
<p style="background: #eeeeee; word-break: break-all; line-height: 130%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"><span style="color: blue">package</span> <span style="color: black">&nbsp;test;<br />
<br />
</span><span style="color: green">//</span> </span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">读取</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">Excel</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">的类</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;java.io.File;<br />
<br />
<span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.Cell;<br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.Sheet;<br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.Workbook;<br />
<br />
</span><span style="color: blue">public</span> &nbsp; <span style="color: blue">class</span> <span style="color: black">&nbsp;ReadExcel&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: blue">public</span> &nbsp; <span style="color: blue">static</span> &nbsp; <span style="color: blue">void</span> <span style="color: black">&nbsp;main(String&nbsp;args[])&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: blue">try</span> &nbsp; <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Workbook&nbsp;book&nbsp;</span> <span style="color: black">=</span> <span style="color: black">&nbsp;Workbook.getWorkbook(</span> <span style="color: blue">new</span> <span style="color: black">&nbsp;File(</span> <span style="color: black">"</span> <span style="color: black">test.xls</span> <span style="color: black">"</span> <span style="color: black">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">获得第一个工作表对象</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sheet&nbsp;sheet&nbsp;</span> <span style="color: black">= <span style="color: black">&nbsp;book.getSheet(</span> <span style="color: black">0</span> <span style="color: black">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">得到第一列第一行的单元格</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;cell1&nbsp;</span> <span style="color: black">= <span style="color: black">&nbsp;sheet.getCell(</span> <span style="color: black">0</span> <span style="color: black">,&nbsp;</span> <span style="color: black">0</span> <span style="color: black">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;</span> <span style="color: black">=</span> <span style="color: black">&nbsp;cell1.getContents();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;book.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> &nbsp; <span style="color: blue">catch</span> <span style="color: black">&nbsp;(Exception&nbsp;e)&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> <span style="color: black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span> <span style="color: black"><br />
}</span> <span style="color: black"><br />
</span></span></span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: Verdana"><br />
&nbsp;&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">程序执行结果：</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">test</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">四、修改文件</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana"><br />
&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">利用</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">jExcelAPI</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">可以修改已有的</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">文件，修改</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">文件的时候，除了打开文件的方式不同之外，</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana"><br />
&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">其他操作和创建</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">是一样的。下面的例子是在我们已经生成的</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">文件中添加一个工作表：</span></p>
<p style="background: #eeeeee; word-break: break-all; line-height: 130%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"><span style="color: blue">package</span> <span style="color: black">&nbsp;test;<br />
<br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;java.io.File;<br />
<br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.Workbook;<br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.write.Label;<br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.write.WritableSheet;<br />
</span><span style="color: blue">import</span> <span style="color: black">&nbsp;jxl.write.WritableWorkbook;<br />
<br />
</span><span style="color: blue">public</span> &nbsp; <span style="color: blue">class</span> <span style="color: black">&nbsp;UpdateExcel&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: blue">public</span> &nbsp; <span style="color: blue">static</span> &nbsp; <span style="color: blue">void</span> <span style="color: black">&nbsp;main(String&nbsp;args[])&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: blue">try</span> &nbsp; <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> <span style="color: green">&nbsp;Excel</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">获得文件</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Workbook&nbsp;wb&nbsp;</span> <span style="color: black">= <span style="color: black">&nbsp;Workbook.getWorkbook(</span> <span style="color: blue">new</span> <span style="color: black">&nbsp;File(</span> <span style="color: black">"</span> <span style="color: black">test.xls</span> <span style="color: black">"</span> <span style="color: black">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">打开一个文件的副本，并且指定数据写回到原文件</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WritableWorkbook&nbsp;book&nbsp;</span> <span style="color: black">= <span style="color: black">&nbsp;Workbook.createWorkbook(</span> <span style="color: blue">new</span> <span style="color: black">&nbsp;File(</span> <span style="color: black">"</span> <span style="color: black">test.xls</span> <span style="color: black">"</span> <span style="color: black">),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wb);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">添加一个工作表</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WritableSheet&nbsp;sheet&nbsp;</span> <span style="color: black">= <span style="color: black">&nbsp;book.createSheet(</span> <span style="color: black">"</span> </span></span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: 宋体">第二页</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: black">"</span> <span style="color: black">,&nbsp; <span style="color: black">1</span> <span style="color: black">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sheet.addCell(</span> <span style="color: blue">new</span> <span style="color: black">&nbsp;Label(</span> <span style="color: black">0</span> <span style="color: black">,&nbsp;</span> <span style="color: black">0</span> <span style="color: black">,&nbsp;</span> <span style="color: black">"</span> </span></span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: 宋体">第二页的测试数据</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: black">"</span> <span style="color: black">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;book.write();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;book.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp; <span style="color: blue">catch</span> <span style="color: black">&nbsp;(Exception&nbsp;e)&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> <span style="color: black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span> <span style="color: black"><br />
}</span> <span style="color: black"><br />
</span></span></span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: Verdana"><br />
</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">其他操作</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">一、</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">数据格式化</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">在</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">中不涉及复杂的数据类型，能够比较好的处理字串、数字和日期已经能够满足一般的应用。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">&nbsp;1</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">、</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">字串格式化</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">字符串的格式化涉及到的是字体、粗细、字号等元素，这些功能主要由</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">WritableFont</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">和</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana"><br />
&nbsp;WritableCellFormat</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">类来负责。假设我们在生成一个含有字串的单元格时，使用如下语句，</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana"><br />
&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">为方便叙述，我们为每一行命令加了编号：</span></p>
<p style="background: #eeeeee; word-break: break-all; line-height: 130%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"><span style="color: black">WritableFont&nbsp;font1</span> <span style="color: black">=</span> <span style="color: black"><br />
&nbsp;</span> <span style="color: blue">new</span> <span style="color: black">&nbsp;WritableFont(WritableFont.TIMES,</span> <span style="color: black">16</span> <span style="color: black">,WritableFont.BOLD);&nbsp;</span></span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: 宋体">①</span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: Verdana"><br />
</span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: Verdana"><br />
&nbsp;WritableCellFormat&nbsp;format1</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: black">=</span> <span style="color: blue">new</span> <span style="color: black">&nbsp;WritableCellFormat(font1);&nbsp;</span></span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: 宋体">②</span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: Verdana"><br />
</span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: Verdana"><br />
&nbsp;Label&nbsp;label</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: black">=</span> <span style="color: blue">new</span> <span style="color: black">&nbsp;Label(</span> <span style="color: black">0</span> <span style="color: black">,</span> <span style="color: black">0</span> <span style="color: black">,&#8221;data&nbsp;</span> <span style="color: black">4</span> <span style="color: black">&nbsp;test&#8221;,format1)&nbsp;</span></span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: 宋体">③</span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: Verdana"><br />
</span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: Verdana"><br />
</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">&nbsp;&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">其中</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">①</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">指定了字串格式：字体为</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">TIMES</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">，字号</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">16</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">，加粗显示。</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">WritableFont</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">有非常丰富的</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana"><br />
&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">构造子，供不同情况下使用，</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">jExcelAPI</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">的</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">java-doc</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">中有详细列表，这里不再列出。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">②</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">处代码使用了</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">WritableCellFormat</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">类，这个类非常重要，通过它可以指定单元格的各种</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana"><br />
&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">属性，后面的单元格格式化中会有更多描述。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">③</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">处使用了</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">Label</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">类的构造子，指定了字串被赋予那种格式。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">在</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">WritableCellFormat</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">类中，还有一个很重要的方法是指定数据的对齐方式，比如针对我们</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana"><br />
&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">上面的实例，可以指定：</span></p>
<p style="background: #eeeeee; word-break: break-all; line-height: 130%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 130%; font-family: Verdana">&nbsp; <span style="color: green">//</span> </span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">把水平对齐方式指定为居中</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;format1.setAlignment(jxl.format.Alignment.CENTRE);<br />
<br />
&nbsp;</span> <span style="color: green">// </span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">把垂直对齐方式指定为居中</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);<br />
</span></span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">二、单元格操作</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">&nbsp;Excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">中很重要的一部分是对单元格的操作，比如行高、列宽、单元格合并等，所幸</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">jExcelAPI<br />
&nbsp;</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">提供了这些支持。这些操作相对比较简单，下面只介绍一下相关的</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">API</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">&nbsp;1</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">、</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">合并单元格</span></p>
<p style="background: #eeeeee; word-break: break-all; line-height: 130%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"><span style="color: black">&nbsp;WritableSheet.mergeCells(</span> <span style="color: blue">int</span> <span style="color: black">&nbsp;m,</span> <span style="color: blue">int</span> <span style="color: black">&nbsp;n,</span> <span style="color: blue">int</span> <span style="color: black">&nbsp;p,</span> <span style="color: blue">int</span> <span style="color: black">&nbsp;q);&nbsp;<br />
<br />
&nbsp;</span> <span style="color: green">//</span> </span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">作用是从</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">(m,n)</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">到</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">(p,q)</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">的单元格全部合并，比如：</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;WritableSheet&nbsp;sheet</span> <span style="color: black">= <span style="color: black">book.createSheet(&#8220;</span></span></span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: 宋体">第一页</span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: Verdana">&#8221;,</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: black">0</span> <span style="color: black">);<br />
<br />
&nbsp;</span> <span style="color: green">//</span> </span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">合并第一列第一行到第六列第一行的所有单元格</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;sheet.mergeCells(</span> <span style="color: black">0 <span style="color: black">,</span> <span style="color: black">0</span> <span style="color: black">,</span> <span style="color: black">5</span> <span style="color: black">,</span> <span style="color: black">0</span> <span style="color: black">);<br />
</span></span></span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left">&nbsp;<span style="font-size: 10pt; line-height: 150%; font-family: 宋体">合并既可以是横向的，也可以是纵向的。合并后的单元格不能再次进行合并，否则会触发异常。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">&nbsp;2</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">、</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">行高和列宽</span></p>
<p style="background: #eeeeee; word-break: break-all; line-height: 130%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"><span style="color: black">&nbsp;WritableSheet.setRowView(</span> <span style="color: blue">int</span> <span style="color: black">&nbsp;i,</span> <span style="color: blue">int</span> <span style="color: black">&nbsp;height);<br />
<br />
&nbsp;</span> <span style="color: green">//</span> </span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">作用是指定第</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">i+1</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">行的高度，比如：</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana"><br />
<br />
&nbsp;</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green">//</span> </span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">将第一行的高度设为</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">200</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;sheet.setRowView(</span> <span style="color: black">0</span> <span style="color: black">,</span> <span style="color: black">200</span> <span style="color: black">);<br />
<br />
&nbsp;WritableSheet.setColumnView(</span> <span style="color: blue">int</span> <span style="color: black">&nbsp;i,</span> <span style="color: blue">int</span> <span style="color: black">&nbsp;width);<br />
<br />
&nbsp;</span> <span style="color: green">//</span> </span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">作用是指定第</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">i+1</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">列的宽度，比如：</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana"><br />
<br />
&nbsp;</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green">//</span> </span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">将第一列的宽度设为</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: Verdana">30</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;sheet.setColumnView(</span> <span style="color: black">0</span> <span style="color: black">,</span> <span style="color: black">30</span> <span style="color: black">);<br />
</span></span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">&nbsp;jExcelAPI</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">还有其他的一些功能，比如插入图片等，这里就不再一一介绍，读者可以自己探索。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-indent: 15pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">其中：如果读一个</span><span style="font-size: 10pt; line-height: 150%; font-family: Verdana">excel</span><span style="font-size: 10pt; line-height: 150%; font-family: 宋体">，需要知道它有多少行和多少列，如下操作：</span></p>
<p style="background: #eeeeee; word-break: break-all; line-height: 130%; text-align: left" align="left"><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"><span style="color: black">Workbook&nbsp;book&nbsp;</span> <span style="color: black">=</span> <span style="color: black">&nbsp;Workbook.getWorkbook(</span> <span style="color: blue">new</span> <span style="color: black">&nbsp;File(</span> <span style="color: black">"</span> </span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: 宋体">测试</span><span style="font-size: 10pt; color: black; line-height: 130%; font-family: Verdana">1.xls</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: black">"</span> <span style="color: black">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">获得第一个工作表对象</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sheet&nbsp;sheet&nbsp;</span> <span style="color: black">= <span style="color: black">&nbsp;book.getSheet(</span> <span style="color: black">0</span> <span style="color: black">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">得到第一列第一行的单元格</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: blue">int <span style="color: black">&nbsp;columnum&nbsp;</span> <span style="color: black">=</span> <span style="color: black">&nbsp;sheet.getColumns();</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">得到列数</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: blue">int <span style="color: black">&nbsp;rownum&nbsp;</span> <span style="color: black">=</span> <span style="color: black">&nbsp;sheet.getRows();</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">得到行数</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(columnum);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rownum);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: blue">for <span style="color: black">&nbsp;(</span> <span style="color: blue">int</span> <span style="color: black">&nbsp;i&nbsp;</span> <span style="color: black">=</span> &nbsp; <span style="color: black">0</span> <span style="color: black">;&nbsp;i&nbsp;</span> <span style="color: black">&lt;</span> <span style="color: black">&nbsp;rownum;&nbsp;i</span> <span style="color: black">++</span> <span style="color: black">)</span> <span style="color: green">//</span> &nbsp;</span></span><span style="font-size: 10pt; color: green; line-height: 130%; font-family: 宋体">循环进行读写</span><span style="font-size: 10pt; line-height: 130%; font-family: Verdana"> <span style="color: green"><br />
</span><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">for</span> <span style="color: black">&nbsp;(</span> <span style="color: blue">int</span> <span style="color: black">&nbsp;j&nbsp;</span> <span style="color: black">=</span> &nbsp; <span style="color: black">0</span> <span style="color: black">;&nbsp;j&nbsp;</span> <span style="color: black">&lt;</span> <span style="color: black">&nbsp;columnum;&nbsp;j</span> <span style="color: black">++</span> <span style="color: black">)&nbsp;</span> <span style="color: black">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;cell1&nbsp;</span> <span style="color: black">=</span> <span style="color: black">&nbsp;sheet.getCell(j,&nbsp;i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;</span> <span style="color: black">=</span> <span style="color: black">&nbsp;cell1.getContents();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span> <span style="color: black">"</span> <span style="color: black">"t</span> <span style="color: black">"</span> <span style="color: black">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> <span style="color: black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> <span style="color: black"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;book.close();</span> </span></span></p>
<img src ="http://www.blogjava.net/msmary/aggbug/151863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/msmary/" target="_blank">谭明</a> 2007-10-10 20:45 <a href="http://www.blogjava.net/msmary/articles/151863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>