星期二, 6月 12, 2012

Apache POI - 用JAVA讀MS Excel(xlsx)檔案

目前還是沒有完全進入C#的世界,學校計畫這邊還是很多是使用JAVA來實現實作的部份。
對於學術與研就來講,容易開發的語言對於研究的推進與驗證是有利的。
畢竟寫出來的東西也沒要包成商品去賣,反而是要能互相引用和交流才是重點。

最近的計畫的需求之一是讀取MS Excel檔。其他的語言有其他的解法。
在此我就從Java的角度去寫一下,順便備份一下簡單的撰寫經驗。
其實這個問題之前有解過,也是使用Java,不過是引用JXL這個package。
然而,MS Excel 2007之後使用的格式有一些變動。
所以找了一下,發現apache POI package看似是目前的最佳解。
花了一天的時間,終於了解他運作的原理。
Apache POI下載後有很多分散的jar檔
不過,他的API doc中的說明卻是全部擺在一起的
像是下面這個例子,是一個很簡單的讀xlsx檔的程式。

Vector temp_result=new Vector();

InputStream inp = new FileInputStream(f);
Workbook wb = WorkbookFactory.create(inp);
Sheet sheet = wb.getSheet("cddd");
int row_count=9;
while(true)
{
Row row = sheet.getRow(row_count++);
if(row==null)
break;
Cell cell = row.getCell(13);
if (cell == null || temp_result.size()>=700)
break;
else
result.add(new Double(cell.getNumericCellValue()));
}

這段程式裡的WorkbookFactory是一個很重要的讀取關鍵。
很直覺的應該會想說,這應該是屬於MS excel部份的程式,所以應該都會放在一起吧!
答案不然,Sheet、Row、Cell這些是都放在一起沒錯。
WorkbookFactory用API查起來也是在同一個路徑下,但是他卻是包在不一樣的.jar裡。
所以如果要方便使用的話,還是無視POI原先裡的目錄,
把所有的.jar都import進來,寫起來會比較方便。

這次就先做這樣簡單的講解,如果之後有在讀取其他MS office檔案再上來分享。

星期日, 6月 03, 2012

久違的湯姆貓!

好久沒有寫JSP了,從新來的感覺很奇妙。
重新開始,當然還是挑老朋友來安裝啦!
湯姆貓,就決定是你啦! Tomcat! Tomcat!

有點賭氣的想要快速完成一個Project,但是沒想到忘記的東西這麼多。
(至於為什麼會賭氣,這又是另外一個誇張的學界故事了 ˊ_>ˋ )
結果讓進度Delay到一個無法想像的地步。
首先遇到的問題是 WebApp的Deployment問題。
印像中之前有一個Tomcat版本,可以從Manager的網頁直接deploy(create)一個空白的WebApp
不過印像真是不可靠,顯然還是要跟以前一樣。
自己在[tomcat_home]/webapps/ 底下建好
[tomcat_home]/webapps/[app_name] 和
[tomcat_home]/webapps/[app_name]/WEB-INF/classes 才行阿!
而且如果是非安裝版的tomcat,
還要自己去conf/底下 tomcat-users.xml加上...
<user password="[PASSWD]" roles="manager-gui" username="[ID]"/ >
才能變成管理者身份...這也太手動了吧~~ (誰叫你要抓"非安裝版"阿!)

好這些都不是重點...重點是,
過了這麼久...新版的tomcat預設還是不會把
[app_name]/WEB-INF/classes 底下的class納入classpath裡面阿
還是非得要設定 [app_name]/WEB-INF/classes/[package_name]/[我要用的類別]
然後每一個JSP import [package_name] 才能使用到 [我要用的類別] <囧>
(當然[我要用的類別]都是屬於[package_name],而且在開tomcat之前還要自己編譯好喔!)

...真的很...手動捏!
或許對程式設計者來講架構很單純,但是在下總覺得有...一種說不出口的陽春感咧 XD

預告一下,下回應該是Apache POI讀xlsx檔的心得! 敬請...不要太期待 ... To Be Continued!!!