閒言閒語
喔呵,終於來到讀取篇了~~
其實讀取比寫入要簡單多了!
所以呢,要給自己找點事做
就做了個"角色搜尋"的程式,這也是以後要用到的~
程式架構
![]() |
點擊可以放大(應該吧。。。) |
- FindMyRole.java裡面有主要程式
- main方法:只有呼叫myFrame();這樣而已。。。
- myFrame方法:GUI介面,含有一個搜尋框、按鈕、最後可以跑出結果的JLabel
- search_role方法:比對使用者輸入的字串有沒有在角色名單裡出現,需要呼叫RoleList.java裡的findrole_str方法
- RoleList.java裡面有findrole_str方法,可傳回二維的字串陣列,裡面有角色流水號以及名字
好吧,其實上這個架構圖是程式寫好後才畫的
事先先畫更好,會更有概念,不會忘記自己要幹嘛= ="
咱們的excel檔
連自己要把什麼挖出來都不知道也太瞎了吧,快來看看角色列表
[不知道這些人名哪來的或心有疑惑或單純無聊的人請按這裡]
(預定放上小說管理器計畫↑)
捲袖子,操傢伙,上吧!
jexcelapi再度登場~~
首先,我們要取出xls檔裡的東東~
不然空有資料就只能乾瞪眼啦QQ
public static String[][] findrole_str(File myWorkBook){
我們的filerole_str方法會傳回一個字串二維陣列,
需要的引數是File,也就是xls檔的資源
Workbook myxls = Workbook.getWorkbook(myWorkBook); Sheet mysheet = myxls.getSheet(0); int columns = mysheet.getColumns(); int rows = (mysheet.getRows())-1; //減一的原因是因為excel檔裡最後一行是防止陣列錯誤的,無意義
首先,取得xls,然後再得到工作表1(sheet1),因為getSheet(int index)是從0開始算的,所以填0
getCloumns()、getRows()可取得行列數
下方的註解 "//減一的原因是因為excel檔裡最後一行是防止陣列錯誤的,無意義"
到時候會再寫一篇文章講這個傻瓜暴力解決BUG法(誤) 敬請期待(再誤)
String[] name1 = new String[rows]; //取出第一名稱的值 Cell[] name1cell = mysheet.getColumn(0); String[] role_sn = new String[rows]; //取出流水號 Cell[] role_sn_cell = mysheet.getColumn(4);
再來,宣告一個叫做name1的字串陣列,準備拿來裝第一名稱的值
宣告Cell(儲存格)物件陣列,利用Sheet裡面的getColumn方法取得這一行的所有儲存格
流水號也一樣~~
。。。。。。。。。。。咦,等等,那為什麼流水號不弄成數字格式呢?
A:因為我不會~~
JAVA規定傳回值只能有一個,只能用字串陣列。。。
聽說有別的方法──Collection(集合)還是泛型的可以辦到
可是我那邊沒學好,一頭霧水
所以既然字串也可以裝數字,就將就吧(被打)
等我把這個洞補起來後再重寫~~= =
for(int i=0; i取出第一名稱(因為一定要有,所以不可能為空) role_sn[i] = role_sn_cell[i].getContents(); //輸入流水號到陣列裡 } String[][] returns = {name1,role_sn}; myxls.close(); return returns;<rows; i++){ if(i==0){ continue; } name1[i] = name1cell[i].getContents()
再等等!!為什麼不放入第一行的內容呢~~
if(i==0){ continue; }
請看VCR。。。呃,不是,是xls檔~~
因為第一行是程式設計師自己對表格內容的註解,
也就是HTML裡表格的<th>標籤
所以continue跳過這次迴圈,刪除,out!
再來就是用Cell裡的getContents方法把資料丟進準備好的陣列裡
從for迴圈出來之後,再變一個陣列出來,把名字陣列跟流水號陣列塞進去
如此就完成一個二維陣列囉~~
最後別忘了回傳
return returns;
於是,大功告成!
以後只要輸入檔案路徑,
就會自動把流水號與角色陣列丟過來囉!
下一篇跟jexcelapi沒關係了,
只是做簡單的搜尋功能,
[GUI介面簡單搜尋功能(續:jexcelapi之讀取!)]
沒有留言:
張貼留言