<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>小白·菜</title>
    <description></description>
    <link>http://poplaryy.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>[转]关于*.jar的总结</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/195912" style="color:red;">http://poplaryy.javaeye.com/blog/195912</a>&nbsp;
          发表时间: 2008年05月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          *.JAR运行时全面的总结!<br />望和我一样在这个难题中苦苦挣扎的同志们能够得到欣慰的答案!~~<br />~~从而,从此~~摆脱苦海,继续JAVA的学习征程!~~~<br />声明:本例在JDK1.3.0中调试成功!<br />注:只要一个普通的APPLET小程序和JAVA程序两者都能运行,此例就能成功.(如果,你的APPLET在AUTOEXEC.BAT没有存在任何的CLASSPATH能够运行,那么,你就不必调整和添加任何的CLASSPATH!~~~~)<br /><br />好了,我们开始:<br />1,写一个APPLET小程序,命名为MyClass.java.如下:<br />(引用论坛高手的程序,我在此鸣谢!)<br /><pre name="code" class="java">

import java.awt.*;
import java.awt.event.*;

public class MyClass{
	public static void main(String[] args){
		Frame f = new Frame();
		
		f.addWindowListener(
			new WindowAdapter() {
				public void windowClosing(WindowEvent e){
					System.exit(0);
				}
			}
		);
		
		f.add(new Label("Hello world"));
		f.setSize(200,200);
		f.setVisible(true);
	}
}
</pre><br />//over~~~<br />然后,编译为MyClass.class.另外,随之出现了一个文件MyClass$1.class.<br />这一步的最后,需要写一个文件,命名为mm.mft.如:<br />Manifest-Version: 1.0<br />Main-Class: MyClass<br />Classpath: .\MyJar.jar<br />你要注意:这三行冒号后有且只有一个空格.每一行后不能有空格.第三行就是在运行你自己编辑的APPLET小程序时需要调用的类路径,由系统通过它完成调用.这就是为什摸JDK1.3.0不用设置CLASSPATH就能编译的原因!!(这是我个人的理解,嘻嘻!~~~)在这里,为在WINDOW的 MS-DOS下运行*.jar,我们可以要,也可以不要它.<br /><br />2,如果类文件放在c:\jv下,那么把它作为当前路径,在当前路径下键入命令:<br />jar cvfm MyJar.jar mm.mft MyClass.class MyClass$1.class<br />这是,生成MyJar.jar文件.<br />注意:把编译生成的所有文件都要写在这个命令后面.若把当前所有的文件都压缩进*.jar,只须这样写：jar cvfm MyJar.jar mm.mft *.class<br /><br />3.运行*.jar.<br />有两种方法:可以双击*.jar文件,也可以在MS-DOS窗口.<br />若是后者,要键入命令:<br />java -jar MyJar.jar<br />等到出现了运行时刻环境WEB浏览器的窗口,说明*.jar运行成功.<br />我在这里耽误的时间最长~~~<br />注意:这个命令后,系统常有两种提示:从MyJar.jar找不到´main´;还有mm.mft出错.还有别的呢~~这些可能都是mm.mft文件里面写入的内容不符合要求造成的!请严格按照提到的事项进行操作:)<br />另外,jar和java这两个命令会有什么需要你输入注意的事情(我指的是:你可能会想到要键入命令的参数:-c x:\y;\z),在这里你不必担心.因为,我们前面说了,只要能运行APPLET和JAVA程序即可. 而jar命令除了对CLASSPATH有要求外,只是仅仅对mm.mft中的Main-Class有所要求罢了.~~~~~~~
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/195912#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 23 May 2008 10:16:17 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/195912</link>
        <guid>http://poplaryy.javaeye.com/blog/195912</guid>
      </item>
      <item>
        <title>[转]使用JAVA透過JXL(JExcel)動態產生Excel檔</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/187482" style="color:red;">http://poplaryy.javaeye.com/blog/187482</a>&nbsp;
          发表时间: 2008年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          上次談過了使用iText產生PDF檔，這次換成來談談使用JExcel來產生EXCEL檔的方法。<br /><br />首先，先到他的SourceForge主頁面download相關的API檔案。<br />http://sourceforge.net/projects/jexcelapi/<br />或<br />http://www.andykhan.com/jexcelapi/download.html<br />當然，他也是OpenSource的元件。<br /><br />下列為其Tutorial教學：<br />http://www.andykhan.com/jexcelapi/tutorial.html<br /><br />一切就緒後，那就準備上路了。<br /><br />下載下來的壓縮檔解開後，可以找到jxl.jar，先將此檔案加入你的Classpath中吧！<br /><br /><span style="font-size: medium"><strong>1. 先建立Workbook</strong></span><br />也就是整份的Excel檔案，可指定檔名。<br /><pre name="code" class="java">
Workbook workbook = Workbook.getWorkbook(new File("test.xls"));
</pre><br /><br /><span style="font-size: medium"><strong>2. 建立Sheet</strong></span><br />也就是每個Excel檔案下面可以跳tag的sheet表。<br /><pre name="code" class="java">
Sheet sheet = workbook.createSheet("我的Excel表", 0);
</pre><br />第一個參數是sheet name，第二個參數是第幾張sheet，當然index是由0開始算。<br /><br /><span style="font-size: medium"><strong>3. 建立字型</strong></span><br /><pre name="code" class="java">
WritableFont chFont11w = new WritableFont(WritableFont.TIMES, 11);
chFont11w.setColour(Colour.WHITE);
</pre><br />先建立一個WritableFont的instance，其constructor的第一個參數是指定字型，第二個是字型大小。<br />其中字型的部份，可以使用WritableFont所提供預設的一堆static常數來指定，<br />也可以直接輸入string，比如打"標楷體"，到時產生的字型就會依照你所指定的來顯示。<br /><br />而setColour是指定此字型的顏色，這個部份就麻煩。<br />(由colour這個字來看，很顯然的JExcel應是英國相關的人開發的:P  反正總之不會是美國)<br /><br />顏色為什麼麻煩呢？在JExcel裡面，Colour class並不提供public constructor讓user自己指定RGB的顏色，<br />所以你只能從Colour中一堆的static常數顏色來指定，之前為了這個問題還研究了一下他的原始碼，<br />果然是不行，他的constructor是protected的，就連繼承之後雖然可以指定rgb顏色，但是仍然沒有作用。<br /><br />(後來我看了一下Excel，發現原來這是因為Excel的標準調色盤就那些顏色<br />不像Word一樣可以讓使用者自訂顏色的關係)<br /><br />查API doc就可以看到，他提供的顏色有：<br /><pre name="code" class="java">
static Colour AQUA            
static Colour AUTOMATIC            
static Colour BLACK            
static Colour BLUE            
static Colour BLUE_GREY            
static Colour BLUE2            
static Colour BRIGHT_GREEN            
static Colour BROWN            
static Colour CORAL            
static Colour DARK_BLUE            
static Colour DARK_BLUE2            
static Colour DARK_GREEN            
static Colour DARK_PURPLE            
static Colour DARK_RED            
static Colour DARK_RED2            
static Colour DARK_TEAL            
static Colour DARK_YELLOW            
static Colour DEFAULT_BACKGROUND            
static Colour DEFAULT_BACKGROUND1            
static Colour GOLD            
static Colour GRAY_25            
static Colour GRAY_50            
static Colour GRAY_80            
static Colour GREEN            
static Colour GREY_25_PERCENT            
static Colour GREY_40_PERCENT            
static Colour GREY_50_PERCENT            
static Colour GREY_80_PERCENT            
static Colour ICE_BLUE            
static Colour INDIGO            
static Colour IVORY            
static Colour LAVENDER            
static Colour LIGHT_BLUE            
static Colour LIGHT_GREEN            
static Colour LIGHT_ORANGE            
static Colour LIGHT_TURQUOISE            
static Colour LIGHT_TURQUOISE2            
static Colour LIME            
static Colour OCEAN_BLUE            
static Colour OLIVE_GREEN            
static Colour ORANGE            
static Colour PALE_BLUE            
static Colour PALETTE_BLACK            
static Colour PERIWINKLE            
static Colour PINK            
static Colour PINK2            
static Colour PLUM            
static Colour PLUM2            
static Colour RED            
static Colour ROSE            
static Colour SEA_GREEN            
static Colour SKY_BLUE            
static Colour TAN            
static Colour TEAL            
static Colour TEAL2            
static Colour TURQOISE2            
static Colour TURQUOISE            
static Colour UNKNOWN            
static Colour VERY_LIGHT_YELLOW            
static Colour VIOLET            
static Colour VIOLET2            
static Colour WHITE            
static Colour YELLOW            
static Colour YELLOW2
</pre>   <br /><br />上面列了這麼多，哪知道哪一個真正的顏色是怎麼樣？<br />除非自己邊試邊換才知，這太麻煩了，我寫了一隻程式把所有的顏色都印出來：<br /><br />好了，但問題來了，上面提供的顏色如果對比較龜毛的人而言(比如我...)，<br />一定是不足使用的，但如剛剛上述說的，Colour不提供自訂顏色的功能，<br />後來找了老半天文件，終於找到一個可以用的方式，<br />就是在workbook中，提供了一個setColourRGB的method，<br />但這個method並不是設定新的顏色，而是可以把上述提供的顏色重新覆寫其RGB設定值，<br />這個方法雖然不是挺好，但是終於有救了！<br /><br />所以你就找個顏色來開刀，例如：<br />workbook.setColourRGB(Colour.DARK_GREEN, 0xDB, 0xF4, 0x8E);<br />我把DARK_GREEN的RGB改寫成#DBF48E (0x表示16進位)<br />(你要什麼顏色而有什麼16進位色碼，很多方法可以取得，比如：Photoshop、Dreamweaver等)<br />這樣一來，之後再使用Colour.DARK_GREEN，就會變成我們想要的顏色了。<br /><br /><span style="font-size: medium"><strong>4. 產生儲存格Cell的格式</strong></span><br /><pre name="code" class="java">
  WritableCellFormat cellFormat1 = new WritableCellFormat ();
  cellFormat1.setFont(chFont11w);
  cellFormat1.setBackground(Colour.DARK_GREEN);
  cellFormat1.setAlignment(Alignment.CENTRE);
  cellFormat1.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.GRAY_80);
</pre><br />這裡呢，要先產生你要的cell的格式，例如指定字型setFont，把我們剛剛產生的白色11大小的TIMES指定進去，<br />設定背景setBackground，把我們剛剛覆寫掉的DARK_GREEN指定進去，<br />指定對齊方式setAlignment為置中，<br />以及設定此cell的上下左右(Border.ALL)的框線以及顏色。<br /><br /><span style="font-size: medium"><strong>5. 增加一個文字儲存格Cell</strong></span><br /><pre name="code" class="java">
Label label = new Label(2, 3, "我是rexmen", cellFormat1);
sheet.addCell(label);  
</pre><br />此constructor的第一個參數是產生的儲存格的x的位置，2表示第3欄(index從0開始算)<br />第二個參數就是y的位置，3表示第4列。<br />用Excel的講法來說，就是「C4」那一格。<br />而第三個就是輸入的文字，而第四格就把我們剛剛產生的cell的format指定進去。<br /><br />最後再把此label加入sheet中。使用addCell method。<br /><br /><span style="font-size: medium"><strong>6. 寫入及結束文件</strong></span><br />把該作的都作完後，別忘了close掉文件，<br /><pre name="code" class="java">
workbook.write(); 
workbook.close();
</pre><br />先使用write()寫入後，再用colose關閉。<br />這樣就大功告成囉！最基本的JExcel就完成了。<br />其他的功能啦，插入圖片啦、試算的公式啦、有的沒的自己有空再試了！<br /><br /><br />其他：<br />若是在JSP上要讓User download這個動態產生的excel檔，<br />要用Servlet RequestDispatcher的方式，<br />若沒有設定正確表頭，導過去的檔案會會在browser上看到的是亂碥，<br />要記得設定 response.setContentType("application/vnd.ms-excel");<br />再導到正確的excel檔案位置<br /><pre name="code" class="java">
RequestDispatcher view = request.getRequestDispatcher("test.xls");
view.forward(request, response);
</pre><br />如此以來，在網址列上不會show出 test.xls 的檔名 (會按照你在web.xml裡設定的servlet對應mapping檔名)，<br />而且可以正確的在browser裡看到Excel的內容。
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/187482#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Apr 2008 11:41:54 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/187482</link>
        <guid>http://poplaryy.javaeye.com/blog/187482</guid>
      </item>
      <item>
        <title>[转]Log4J 最佳实践之全能配置文件</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/185040" style="color:red;">http://poplaryy.javaeye.com/blog/185040</a>&nbsp;
          发表时间: 2008年04月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          下面给出得Log4J配置文件实现了输出到控制台，文件，回滚文件，发送日志邮件，输出到数据库日志表，自定义标签等全套功能。<br /><br />log4j.rootLogger=DEBUG,CONSOLE,A1,im<br />#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE<br /><br />log4j.addivity.org.apache=true<br /><br /><br />###################<br /># Console Appender<br />###################<br />log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender<br />log4j.appender.Threshold=DEBUG<br />log4j.appender.CONSOLE.Target=System.out<br />log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout<br />log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n<br /><br /><br />#####################<br /># File Appender<br />#####################<br />log4j.appender.FILE=org.apache.log4j.FileAppender<br />log4j.appender.FILE.File=file.log<br />log4j.appender.FILE.Append=false<br />log4j.appender.FILE.layout=org.apache.log4j.PatternLayout<br />log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br /># Use this layout for LogFactor 5 analysis<br /><br /><br /><br />########################<br /># Rolling File<br />########################<br />log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender<br />log4j.appender.ROLLING_FILE.Threshold=ERROR<br />log4j.appender.ROLLING_FILE.File=rolling.log<br />log4j.appender.ROLLING_FILE.Append=true<br />log4j.appender.ROLLING_FILE.MaxFileSize=10KB<br />log4j.appender.ROLLING_FILE.MaxBackupIndex=1<br />log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout<br />log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br /><br /><br />####################<br /># Socket Appender<br />####################<br />log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender<br />log4j.appender.SOCKET.RemoteHost=localhost<br />log4j.appender.SOCKET.Port=5001<br />log4j.appender.SOCKET.LocationInfo=true<br /># Set up for Log Facter 5<br />log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout<br />log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n<br /><br /><br />########################<br /># Log Factor 5 Appender<br />########################<br />log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender<br />log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000<br /><br /><br />########################<br /># SMTP Appender<br />#######################<br />log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender<br />log4j.appender.MAIL.Threshold=FATAL<br />log4j.appender.MAIL.BufferSize=10<br />log4j.appender.MAIL.From=chenyl@hollycrm.com<br />log4j.appender.MAIL.SMTPHost=mail.hollycrm.com<br />log4j.appender.MAIL.Subject=Log4J Message<br />log4j.appender.MAIL.To=chenyl@hollycrm.com<br />log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout<br />log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br /><br /><br />########################<br /># JDBC Appender<br />#######################<br />log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender<br />log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test<br />log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver<br />log4j.appender.DATABASE.user=root<br />log4j.appender.DATABASE.password=<br />log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')<br />log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout<br />log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br /><br /><br />log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender<br />log4j.appender.A1.File=SampleMessages.log4j<br />log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'<br />log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout<br /><br />###################<br />#自定义Appender<br />###################<br />log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender<br /><br />log4j.appender.im.host = mail.cybercorlin.net<br />log4j.appender.im.username = username<br />log4j.appender.im.password = password<br />log4j.appender.im.recipient = corlin@cybercorlin.net<br /><br />log4j.appender.im.layout=org.apache.log4j.PatternLayout<br />log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/185040#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Apr 2008 16:25:01 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/185040</link>
        <guid>http://poplaryy.javaeye.com/blog/185040</guid>
      </item>
      <item>
        <title>[转]在UltraEdit和EditPlus下的配置Groovy语法环境</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/181182" style="color:red;">http://poplaryy.javaeye.com/blog/181182</a>&nbsp;
          发表时间: 2008年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          groovy虽然没有自己的IDE，但是它可以依附在很多现有的开发环境如eclipse，intelli idea等。不过不巧我都不大用这些开发环境的。还好，找到了<a href="http://docs.codehaus.org/download/attachments/23080/wordfile-groovy.txt?version=1" target="_blank">groovy的ultraedit语法文件</a> 这样在ultraedit下面也可以高亮显示、编译和运行groovy了。<br />ultraedit甚至还提供了命令自动补全功能，不过默认使用的组合键是ctrl+space，恰好和输入法切换键冲突了。<br />不过我们可以修改组合键：Advanced - Configuration - Key Mapping<br />在commands里面找到AutoComplete（命令不是按字母排序的，按一下“A”键就自动找到啦），然后输入焦点转到 Press New Key框中，选择自己喜欢的组合键，比如 Alt+space，确认组合键出现在框里面后点一下Assign键，大功告成。<br />自动编译的配置见 <a href="http://groovy.codehaus.org/UltraEdit+Plugin" target="_blank">http://groovy.codehaus.org/UltraEdit+Plugin</a><br /><br />使用方式：<br />1 将下载好的文本加入到 UE安装目下的 WORDFILE.UEW文件中<br />2 打开 高级->属性->编辑器显示->语法加亮 语言选择Groovy<br /><br />editplus也是我心爱的编辑器之一，还好不只我喜欢editplus和groovy，有个韩国网站也有同好：http://www.javaclue.org/index.jsp<br />看不懂:-P。不过也不用看懂，直接把他们写的groovy语法文件<br />下载下来，在editplus的参数选项－－设置和语法里面添加groovy的语法和自动补全文件，现在editplus也支持groovy的高亮显示和自动补全了。<br />不过editplus的自动补全和ultraedit有写不同，是敲一个关键字，然后按空格的时候把相关的语法元素自动补进来。<br />如果韩国网站访问不到也可以到<a href="http://www.blogjava.net/Files/emu/groovy.editplus.rar" target="_blank">这里</a>下这两个语法文件。
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/181182#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Apr 2008 11:54:24 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/181182</link>
        <guid>http://poplaryy.javaeye.com/blog/181182</guid>
      </item>
      <item>
        <title>[ 备忘]JExcelApi的的缺点</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/178338" style="color:red;">http://poplaryy.javaeye.com/blog/178338</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          不可否认JExcelApi是非常方便的一个开源Excel操作包，但是也有很多不尽人意的地方。<br /><br />工作上面用到，遇到的问题，这里记录一下：<br /><br />1、不能导入注释，从Excel解析出来的内容中缺少了注释。虽然平时注释很少用于重要信息的记录，可是就是有这么一些BT的用户。。。<br /><br />2、对于公式的拖拉，可能会解析错误。这一点比较恐怖，居然会丢失数据。比如有一个=SUM(A1:D1)的公式，然后托拉下来。导入的时候可能变成=SUM(AJ1:AJ1)去了。而在HSSF中，托拉出来的单元格，似乎跟普通单元格是不一样的。这一点还在研究，研究好了再在这里补完吧。<br /><br />待续。。。
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/178338#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Apr 2008 11:32:36 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/178338</link>
        <guid>http://poplaryy.javaeye.com/blog/178338</guid>
      </item>
      <item>
        <title>[备忘][SQLServer]已将语言设置改为 简体中文 </title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/176426" style="color:red;">http://poplaryy.javaeye.com/blog/176426</a>&nbsp;
          发表时间: 2008年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天在项目调试的时候，数据库总输出一些警告信息。<br />如：<br />Hibernate: select this_.SPDomain as SPDomain4_0_, this_.SPID as SPID4_0_, this_.SPName as SPName4_0_, this_.AvgAccessCount as AvgAcces4_4_0_ from SearchSPDomains this_ where this_.SPDomain=?<br />2007-08-10 16:06:59,734 WARN JDBCExceptionReporter - SQL Warning: 0, SQLState:<br />2007-08-10 16:06:59,734 WARN JDBCExceptionReporter - [Microsoft][SQLServer 2000 Driver for JDBC]Database changed to HBN<br />2007-08-10 16:06:59,734 WARN JDBCExceptionReporter - SQL Warning: 5701, SQLState: 01000<br />2007-08-10 16:06:59,734 WARN JDBCExceptionReporter - [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]已将数据库上下文改为 'HBN'。<br />2007-08-10 16:06:59,734 WARN JDBCExceptionReporter - SQL Warning: 0, SQLState:<br />2007-08-10 16:06:59,734 WARN JDBCExceptionReporter - [Microsoft][SQLServer 2000 Driver for JDBC]Language changed to 简体中文<br />2007-08-10 16:06:59,734 WARN JDBCExceptionReporter - SQL Warning: 5703, SQLState: 01000<br />2007-08-10 16:06:59,734 WARN JDBCExceptionReporter - [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]已将语言设置改为 简体中文<br /><br /><br />后来上网查了一下：<br /><br />正常启动的信息<br />这是微软的jdbc for sqlserver 的特色，可以用 jtds 的驱动就不会出现这样的提示<br /><br /><br />sqL Server数据库的Java驱动程序jTDS近日发布了1.1版本。<br /><br />jTDS JDBC Driver是针对微软SQL Server数据库开发的JDBC驱动程序。1.1版本是一个重要的版本发布，新特性包括：SQL语句缓存有很大改进，可配置的元数据缓存，优化了锁定支持，更快的单向游标等。<br /><br />下载地址：http://jtds.sourceforge.net/
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/176426#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Mar 2008 17:14:41 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/176426</link>
        <guid>http://poplaryy.javaeye.com/blog/176426</guid>
      </item>
      <item>
        <title>[转]使用POI操作Excel的几点注意事项</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/175384" style="color:red;">http://poplaryy.javaeye.com/blog/175384</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先说说现在我所知道的Java编辑Excel文件的两大开源工具：<br /><br />jakarta POI和JavaExcelAPI（简称JXL），这两套工具我都试用了一这段时间，感觉各有优劣吧。POI在某些细节有些小Bug并且不支持写入图片，其他方面都挺不错的；<br /><br />JXL就惨了，除了支持写入图片外，我暂时看不到它比POI好的地方，我碰到的主要的问题就是对公式支持不是很好，很多带有公式的Excel文件用JXL 打开后，公式就丢失了（比如now(),today()），在网上看到其他大虾评论说JXL写入公式也有问题，另外，JXL操作Excel文件的效率比 POI低一点。经过比较后，我选择了POI开发我的项目。<br /><br />现在我要做的东西基本完成啦，我把这段时间使用POI的一些心得总结出来，希望能对和我遇到相同问题的朋友有所帮助，至于POI基本的使用方法，自己去看文档吧。<br /><ol><li>设置分页符的bug</li><br />POI里的HSSFSheet类提供了setRowBreak方法可以设置Sheet的分页符。<br /><br />Bug：如果你要设置分页符的Sheet是本来就有的，并且你没有在里面插入过分页符，那么调用setRowBreak时POI会抛出空指针的异常。<br /><br />解决方法：在Excel里给这个sheet插入一个分页符，用POI打开后再把它删掉，然后你就可以随意插入分页符了。<br /><br />如果sheet是由POI生成的则没有这个问题。我跟踪了setRowBreak的源代码，发现是Sheet.Java下的 PageBreakRecord rowBreaks这个变量在搞鬼，如果Sheet里原来没有分页符，开发这个模块的那位兄台忘了为这个对象new实例，所以只能我们先手工给Excel 插入一个分页符来触发POI为rowBreaks创建实例。 <li>如何拷贝行</li><br />我在gmane.org的POI用户论坛翻遍了每个相关的帖子，找遍了api，也没看到一个拷贝行的方法，没办法，只能自己写：<br /></ol><br /><pre name="code" class="java">
//注：this.fWorkbook是一个HSSHWorkbook，请自行在外部new
public void copyRows(String pSourceSheetName,
        String pTargetSheetName,
        int pStartRow, int pEndRow,
        int pPosition) {
    HSSFRow sourceRow = null;
    HSSFRow targetRow = null;
    HSSFCell sourceCell = null;
    HSSFCell targetCell = null;
    HSSFSheet sourceSheet = null;
    HSSFSheet targetSheet = null;
    Region region = null;
    int cType;
    int i;
    short j;
    int targetRowFrom;
    int targetRowTo;

    if ((pStartRow == -1) || (pEndRow == -1)) {
        return;
    }
    sourceSheet = this.fWorkbook.getSheet(pSourceSheetName);
    targetSheet = this.fWorkbook.getSheet(pTargetSheetName);
		//拷贝合并的单元格
    for (i = 0; i &lt; sourceSheet.getNumMergedRegions(); i++) {
        region = sourceSheet.getMergedRegionAt(i);
        if ((region.getRowFrom() >= pStartRow) && (region.getRowTo() &lt;= pEndRow)) {
            targetRowFrom = region.getRowFrom() - pStartRow + pPosition;
            targetRowTo = region.getRowTo() - pStartRow + pPosition;
            region.setRowFrom(targetRowFrom);
            region.setRowTo(targetRowTo);
            targetSheet.addMergedRegion(region);
        }
    }
		//设置列宽
    for (i = pStartRow; i &lt;= pEndRow; i++) {
        sourceRow = sourceSheet.getRow(i);
        if (sourceRow != null) {
            for (j = sourceRow.getFirstCellNum(); j &lt; sourceRow.getLastCellNum(); j++) {
                targetSheet.setColumnWidth(j, sourceSheet.getColumnWidth(j));
            }
            break;
        }
    }
		//拷贝行并填充数据
    for (; i &lt;= pEndRow; i++) {
        sourceRow = sourceSheet.getRow(i);
        if (sourceRow == null) {
            continue;
        }
        targetRow = targetSheet.createRow(i - pStartRow + pPosition);
        targetRow.setHeight(sourceRow.getHeight());
        for (j = sourceRow.getFirstCellNum(); j &lt; sourceRow.getLastCellNum(); j++) {
            sourceCell = sourceRow.getCell(j);
            if (sourceCell == null) {
                continue;
            }
            targetCell = targetRow.createCell(j);
            targetCell.setEncoding(sourceCell.getEncoding());
            targetCell.setCellStyle(sourceCell.getCellStyle());
            cType = sourceCell.getCellType();
            targetCell.setCellType(cType);
            switch (cType) {
                case HSSFCell.CELL_TYPE_BOOLEAN:
                    targetCell.setCellValue(sourceCell.getBooleanCellValue());
                    break;
                case HSSFCell.CELL_TYPE_ERROR:
                    targetCell.setCellErrorValue(sourceCell.getErrorCellValue());
                    break;
                case HSSFCell.CELL_TYPE_FORMULA:
										//parseFormula这个函数的用途在后面说明
                    targetCell.setCellFormula(parseFormula(sourceCell.getCellFormula()));
                    break;
                case HSSFCell.CELL_TYPE_NUMERIC:
                    targetCell.setCellValue(sourceCell.getNumericCellValue());
                    break;
                case HSSFCell.CELL_TYPE_STRING:
                    targetCell.setCellValue(sourceCell.getStringCellValue());
                    break;
            }
        }
    }
}
</pre><br />这个函数有两个问题暂时无法解决：<br /><br />a、只能在同一个Workbook里面使用，跨Workbook总是拷不过去，不知道为什么？<br /><br />b、由于在拷贝行时也把行高也拷过去了，如果往这些单元格里写入的数据长度超过单元格长度，那么他们不会自动调整行高！<br /><br />3、公式的问题<br /><br />POI对Excel公式的支持是相当好的，但是我发现一个问题，如果公式里面的函数不带参数，比如now()或today()，那么你通过 getCellFormula()取出来的值就是now(ATTR(semiVolatile))和today(ATTR (semiVolatile))，这样的值写入Excel是会出错的，这也是我上面copyRow的函数在写入公式前要调用parseFormula的原因，parseFormula这个函数的功能很简单，就是把ATTR(semiVolatile)删掉，我把它的代码贴出来：<br /><pre name="code" class="java">
private String parseFormula(String pPOIFormula) {
    final String cstReplaceString = "ATTR(semiVolatile)"; //$NON-NLS-1$
    StringBuffer result = null;
    int index;

    result = new StringBuffer();
    index = pPOIFormula.indexOf(cstReplaceString);
    if (index >= 0) {
        result.append(pPOIFormula.substring(0, index));
        result.append(pPOIFormula.substring(index + cstReplaceString.length()));
    } else {
        result.append(pPOIFormula);
    }

    return result.toString();
}
</pre><br />至于为什么会出现ATTR(semiVolatile)，还需要大家的探索精神！ <br /><pre name="code" class="java">
public boolean drawImage(Image image, int dx1, int dy1, int dx2, int dy2,
 				int sx1, int sy1, int sx2, int sy2, Color bgColor, ImageObserver imageobserver) {
    if (logger.check(POILogger.WARN)) {
        logger.log(POILogger.WARN, "drawImage() not supported");
    }
    return true;
}
</pre><br />所以我强烈建议大家，以后使用第三方开发包一定尽量下载它的源代码，这样你在碰到问题时，看看它的的内部是怎么实现的，很多时候就可以不必重蹈我的覆辙了。既然POI不能写入图片，那我们只能把目光投向JXL，我用JXL写入图片功能是实现了，付出的代价是now()和today()这些函数丢失掉了，鱼与熊掌不能兼得吧。 (T117)
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/175384#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Mar 2008 13:15:23 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/175384</link>
        <guid>http://poplaryy.javaeye.com/blog/175384</guid>
      </item>
      <item>
        <title>[非原创]Jakata Poi HSSF：纯java的Excel解决方案</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/175359" style="color:red;">http://poplaryy.javaeye.com/blog/175359</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <ul><li>背景</li></ul><blockquote>Jakarta POI是apache的子项目，目标是处理ole2对象。目前比较成熟的是HSSF接口，处理MS
Excel（97-2002）对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西，而是真正的Excel对象，你可以控制一些属
性如sheet,cell等等。<br /></blockquote><ul><li>HSSFWorkbook excell文档对象介绍</li></ul><blockquote>HSSFSheet excell的表单<br /><br />HSSFRow excell的行<br /><br />HSSFCell excell的格子单元<br /><br />HSSFFont excell字体<br /><br />HSSFName 名称<br /><br />HSSFDataFormat 日期格式<br /><br />在poi1.7中才有以下2项：<br /><br />HSSFHeader sheet头<br /><br />HSSFFooter sheet尾<br /><br />和这个样式<br /><br />HSSFCellStyle cell样式<br /><br />辅助操作包括<br /><br />HSSFDateUtil 日期<br /><br />HSSFPrintSetup 打印<br /><br />HSSFErrorConstants 错误信息表</blockquote><ul><li>org.apache.poi.hssf包的结构图</li></ul><br /><div style="text-align: center"><img src="../../../topics/download/25c2db4c-9a80-3231-8c91-c7ceb02200da" alt="" /></div><br /><div><div align="center">图1 基本对象<br /></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从中不难可以发现每一个基本对象都关联了一个Record对象。Record对象是一个参考Office格式的相关记录。<br /></div><br /><div style="text-align: center"><img src="../../../topics/download/daf0177d-070b-37e7-b950-68c667e1e26b" alt="" /></div><br /><div><div align="center">图2 HSSFWorkbook<br /></div></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HSSFWorkbook即是一个Excell对象。这幅类图体现的是HSSFWorkbook和基本对象的相互关系。可见，许多对象中也建立了Workbook的引用。还需要注意的是在HSSFWorkbook和 HSSFSheet中建立了log机制POILogger，而且POILogger也是使用apache Log4J实现的。</div><div>&nbsp;</div><div><span class="content">附：</span></div><div><span class="content">POI主页：<a href="http://jakarta.apache.org/poi/" target="_blank"><span style="color: #666666">http://jakarta.apache.org/poi/</span></a></span></div><div><span class="content">初学者如何快速上手使用POI HSSF：<a href="http://jakarta.apache.org/poi/hssf/quick-guide.html" target="_blank"><span style="color: #666666">http://jakarta.apache.org/poi/hssf/quick-guide.html</span></a>。<br />下载网址：<a href="http://www.apache.org/dyn/closer.cgi/jakarta/poi/" target="_blank"><span style="color: #666666">http://www.apache.org/dyn/closer.cgi/jakarta/poi/</span></a></span></div><div><span class="content"><br />参考文章：简单EXCEL报表方案：Spring+POI<br /><a href="http://www.blogjava.net/beyondduke/archive/2005/12/15/23978.aspx" target="_blank"><span style="color: #666666">http://www.blogjava.net/beyondduke/archive/2005/12/15/23978.aspx</span></a><br />Jakata Poi HSSF：纯java的Excel解决方案<br /><a href="http://www.suiyuanwu.com/detail.asp?id=1188" target="_blank"><span style="color: #666666">http://www.suiyuanwu.com/detail.asp?id=1188</span></a></span> <br /></div><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/175359#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Mar 2008 11:50:45 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/175359</link>
        <guid>http://poplaryy.javaeye.com/blog/175359</guid>
      </item>
      <item>
        <title>[原创]数落数落Jdom和dom4j</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/173565" style="color:red;">http://poplaryy.javaeye.com/blog/173565</a>&nbsp;
          发表时间: 2008年03月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这两个开源包都有相当久远的历史，也是最常用的XML包。想必大家都会认为它们比较稳定了吧？殊不知他们也有很多不尽如人意的地方。也许大家平时不太会注意，这里说出来只是希望大家能注意一下，不要因为这些问题影响工作。<br /><br />1、 Attribute不能超过1W个！<br />无论是Jdom还是Dom4j，解析XML时一个标签内的Attribute不能超过1W个。这点两个包问题是同样的。如果需要用XML传输大量数据的话最好不要使用Attribute来传输。不然不知道什么时候就超过1W个，导致程序出错。我们项目中是使用一个字符创Attribute来存放所有信息，最后拆字符串的方法来做的。<br /><br />2、大量Attribute的标签解析后获得的数据有可能会混乱。<br />问题同上，差不多上千的时候。解析出来的Attribute就开始产生混乱了。怎么个乱法呢？有很多包含了%的Attribute的一部分回合另外一些Attribute的一部分互换。这点比较费解，并且同样是两个包都会存在的问。<br /><br /><br />一时想不起来了。。。以后慢慢补充吧。。。
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/173565#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Mar 2008 00:06:12 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/173565</link>
        <guid>http://poplaryy.javaeye.com/blog/173565</guid>
      </item>
      <item>
        <title>[原创]JexcelApi和POI导入Excel日期识别成数字的解决方案</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/173390" style="color:red;">http://poplaryy.javaeye.com/blog/173390</a>&nbsp;
          发表时间: 2008年03月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          用过Jxl或者POI导入Excel信息的朋友应该都遇到过这样的问题。日期格式的单元格有些会识别成数字单元格。（为什么说有些呢？因为在Excel文件中输入2008-3-18的日期可以正确导入，但是输入3-18的就会识别成数字。）关于这个问题我找了很久，都没有找到解答。现在解决了，所以记录以下，一是怕以后忘了，二是希望遇到这个问题的朋友可以少走弯路。<br /><br />首先来分析一下这个问题的成因。既然两个开源包都有同样的问题，说明可能是Excel内部就是这样存储的。所以需要通过一些其他的方式来从NUMERIC Cell中把这些日期找出来。<br /><br />有两种方式可以辨别NUMERIC Cell储存的是否是日期：<br /><br />方法一：如果用的是POI，可以直接用HSSFDateUtil.isCellDateFormatted(cell)这个方法。<br /><pre name="code" class="java">
case HSSFCell.CELL_TYPE_NUMERIC:
    if (HSSFDateUtil.isCellDateFormatted(cell)) {
        double d = cell.getNumericCellValue();
        Date date = HSSFDateUtil.getJavaDate(d);
    } 
</pre><br />方法二：如果用的是Jxl，可以将cell.getCellFormat 强制转换成 XFRecord。然后判断XFRecord.formatIndex 如果等于 58就是DateCell。<br /><pre name="code" class="java">
if (cell.getType() == CellType.NUMBER) {
    NumberCell nc = (NumberCell) cell;
    XFRecord xfr = (XFRecord) nc.getCellFormat();
    final int INDEX_OF_DATE = 58;
	if(xfr.formatIndex == INDEX_OF_DATE) {
    	Date date = HSSFDateUtil.getJavaDate(nc.getValue());
    	content = dateformat.format(date);
    } 
}
</pre><br />得到的这个double不能直接拿来用。转换可以用HSSFDateUtil.getJavaDate(double date)这个方法。<br /><br />PS：接下来还有 jxl下注释的导入和单元格链接两道难关要闯，希望有这方面经验的朋友也能跟我分享一下。谢谢。
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/173390#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 18 Mar 2008 14:20:22 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/173390</link>
        <guid>http://poplaryy.javaeye.com/blog/173390</guid>
      </item>
      <item>
        <title>[转]UML类图中的关联、聚合、组合</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/162651" style="color:red;">http://poplaryy.javaeye.com/blog/162651</a>&nbsp;
          发表时间: 2008年02月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: small"><span style="font-size: x-small"><em><span style="font-family: 宋体">分析一下</span><span>UML</span><span style="font-family: 宋体">类图中关联、聚合、组合三者的定义与关系。</span></em></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><span style="font-size: x-small">@author:ZJ 06-11-27</span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><span style="font-size: x-small; color: #800080"><a href="http://zhangjunhd.blog.51cto.com/" target="_blank">http://zhangjunhd.blog.51cto.com/</a></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><strong><span style="font-size: 14pt">1</span><span style="font-size: 14pt; font-family: 宋体">．关联（</span><span style="font-size: 14pt">Association</span><span style="font-size: 14pt; font-family: 宋体">）</span></strong></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; color: black"><span style="font-size: x-small"><span style="font-size: x-small">类之间的关联大多用来表示变量实例持有着对其他对象的引用。</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><span><img src="http://blog.51cto.com/attachment/200707/200707291185680711722.jpg" border="0" alt="" /></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><span style="font-size: x-small"><span>Phone</span><span style="font-family: 宋体">拥有一个对</span><span>Button</span><span style="font-family: 宋体">的引用。</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><strong><span style="font-size: 14pt">2</span><span style="font-size: 14pt; font-family: 宋体">．聚合（</span><span style="font-size: 14pt">Aggregation</span><span style="font-size: 14pt; font-family: 宋体">）</span></strong></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: x-small"><span style="font-size: x-small"><span style="font-family: 宋体; color: black">聚合是关联的一种特殊形式，它意味着一种整体</span><span style="color: black">/</span><span style="font-family: 宋体; color: black">部分（</span><span style="font-family: arial; color: black">whole/part</span><span style="font-family: 宋体; color: black">）的关系。</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: x-small"><span style="font-family: 宋体; color: black"><span><img src="http://blog.51cto.com/attachment/200707/200707291185680728957.jpg" border="0" alt="" /></span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: x-small"><span style="font-size: x-small"><span style="font-family: 宋体">一个整体不能是它自己的一部分。 因此 </span><span style="font-family: 宋体; color: black">，实例不能形成聚合回路，一个单独的对象不能够成为它自己的聚合，两个对象不能互相聚合，三个对象不能形成一个聚合环。</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><span style="font-family: 宋体"><span style="font-size: x-small">下图为实例间的非法聚合循环：</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体"><img src="http://blog.51cto.com/attachment/200707/200707291185680740754.jpg" border="0" alt="" /></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><strong><span style="font-size: 14pt">3</span><span style="font-size: 14pt; font-family: 宋体">．组合（</span><span style="font-size: 14pt">Composition</span><span style="font-size: 14pt; font-family: 宋体">）</span></strong></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: x-small"><span style="font-size: x-small"><span style="font-family: 宋体">组合是一种特殊的聚合形式。</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><span style="font-size: x-small"><img src="http://blog.51cto.com/attachment/200707/200707291185680749497.jpg" border="0" alt="" />&nbsp;</span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><span style="font-size: x-small"><span>UML</span><span style="font-family: 宋体">对组合的定义：</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><span style="font-size: x-small"><span style="font-family: 宋体">①如同聚合，实例不能有循环。</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><span style="font-size: x-small"><span style="font-family: 宋体">②一个被所有者实例不能同时有两个所有者。</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><span style="font-size: x-small"><span style="font-family: 宋体">③</span><span style="font-family: 宋体">所有者负责被组合的对象的生命周期的管理。如果所有者被销毁，被所有者也必须跟着一起被销毁，如果所有者被复制，被所有者也必须跟着一起被复制。基于此点，可以用组合来描述深拷贝。</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><span style="font-size: x-small"><span style="font-family: 宋体">下图为非法组合：</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><span><img src="http://blog.51cto.com/attachment/200707/200707291185680760673.jpg" border="0" alt="" /></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><strong><span style="font-size: 14pt">4</span><span style="font-size: 14pt; font-family: 宋体">．参考资料</span></strong></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: x-small"><span style="font-size: x-small"><span style="font-family: 宋体">⑴</span><span>Robert Martin,UML for java programmers,2004</span></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><span style="font-size: x-small">&nbsp;</span></span></div><p>本文出自 &ldquo;<a href="http://zhangjunhd.blog.51cto.com/">子 孑</a>&rdquo; 博客，请务必保留此出处<a href="http://zhangjunhd.blog.51cto.com/113473/36050">http://zhangjunhd.blog.51cto.com/113473/36050</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/162651#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 16 Feb 2008 16:21:06 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/162651</link>
        <guid>http://poplaryy.javaeye.com/blog/162651</guid>
      </item>
      <item>
        <title>NetBeans SVN 攻略</title>
        <author>小白·菜</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://poplaryy.javaeye.com">小白·菜</a>&nbsp;
          链接：<a href="http://poplaryy.javaeye.com/blog/146747" style="color:red;">http://poplaryy.javaeye.com/blog/146747</a>&nbsp;
          发表时间: 2007年12月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前些天NetBeans6.0终于出了，也开始想尝试一下eclipse之外的优秀IDE。而要使用它第一件事就是从公司的SVN服务器上把工程拉下来。虽然说NetBeans6.0已经整合了Subversion，但还是比较麻烦的。下面是经过无数血泪总结下来的经验：<img src="/images/smiles/icon_cry.gif"/><br /><br />1、向后先不要安装netbeans提示的<span style="color: brown">CollabNetSubversion</span>。不知道为什么，使用它的时候会提示.svn文件夹下面某个文件无法创建。这里应该使用<a href="http://subversion.tigris.org/downloads/1.4.5-win32/apache-2.2/svn-win32-1.4.5.zip" target="_blank">http://subversion.tigris.org/downloads/1.4.5-win32/apache-2.2/svn-win32-1.4.5.zip</a><br />。解压后在Path里配置其/bin文件夹<br /><br />2、配制好Path后重新启动netbeans就可以开始checkout了。<br /><br />3、checkout时设置好服务器地址、路径、版本号（格式为@XXX，或者在后面一步中选择），本地文件夹开始下载。比如我们的项目是：http://xxxxxx.cn/svn/dragonboat/trunk/anaplatform@2000，2000是版本号。当然如果不知道最新版本号的时候也可以在下一步中Respository Revision项中查找版本列表。<br /><br />4、下载成功后，netbean会提示你用现有文件生成工程。选择Existing Sources方式生成。注意生成的时候工程目录和Source目录应该是不同的。<br /><br />    后记：netbean6.0现在还不是很成熟，还是有很多bug。有时候发布工程或者创建新工程的时候还是会出错。版本控制的时候不能够整个工程更新，web和Source分开。导致很多时候不能保持修改的东西是最新的。当然也可能是因为使用习惯问题。不过还是希望netbean能更人性化一点。
          <br/>
          <span style="color:red;">
            <a href="http://poplaryy.javaeye.com/blog/146747#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 07 Dec 2007 17:14:47 +0800</pubDate>
        <link>http://poplaryy.javaeye.com/blog/146747</link>
        <guid>http://poplaryy.javaeye.com/blog/146747</guid>
      </item>
  </channel>
</rss>