iT邦幫忙

DAY 16
2

java菜鳥的學習筆記系列 第 16

使用Apache POI API讀取Excel資料

今天因為工作需要就以Apache POI讀取Excel資料的相關API為今天的學習心得,其實跟寫入相似度很高,差別讀入xls後有getPhysicalNumberOfRows取得所有列數目以及getPhysicalNumberOfCells取得所有Cell數目,挺好用的,再來要注意的是get Cell的值的時候要注意資料型態,以及POI3.x版以後getCell方法要指定如果欄位是空的話,程式要回傳Null還是Blank,範例如下,這支程式再修改後以後之後要做統計用的,配合Java FX做出漂亮的UI

package read;<br></br><br></br>
import java.nio.file.Files;<br></br>
import java.nio.file.Path;<br></br>
import java.nio.file.Paths;<br></br>
import java.nio.file.StandardOpenOption;<br></br>
import java.util.ArrayList;<br></br>
import java.util.List;<br></br><br></br>
import org.apache.poi.hssf.usermodel.HSSFCell;<br></br>
import org.apache.poi.hssf.usermodel.HSSFRow;<br></br>
import org.apache.poi.hssf.usermodel.HSSFSheet;<br></br>
import org.apache.poi.hssf.usermodel.HSSFWorkbook;<br></br>
import org.apache.poi.ss.usermodel.Row;<br></br><br></br>
import data.FPR;<br></br><br></br>
public class GetDataFromFile {<br></br>
	List<FPR> fprlist=new ArrayList<>();<br></br>
	public void readFromExcel(){<br></br>
		Path src=Paths.get("D:\\FPR_1019.xls");<br></br>
		try{<br></br>
			HSSFWorkbook workbook = new HSSFWorkbook(Files.newInputStream(src, StandardOpenOption.READ)); //讀入xls檔<br></br>
			HSSFSheet sheet= workbook.getSheet("FPR-Status");//讀取要操作的資料表<br></br>
			int rows = sheet.getPhysicalNumberOfRows(); //取得所有的Row<br></br>
			for(int r=1; r<rows; r++){ //掃描所有的Row取得資料<br></br>
				HSSFRow row=sheet.getRow(r);<br></br>
				HSSFCell isOct=row.getCell(1);//取得第一欄資料<br></br>
				HSSFCell fprNo=row.getCell(3);<br></br>
				HSSFCell aff=row.getCell(4, Row.CREATE_NULL_AS_BLANK); //自POI 3.x開始新增MissingPolicy參數<br></br>
				HSSFCell code=row.getCell(17);                         //用來確定當遇到空白的時候程式要傳回null還是blank<br></br>
				FPR fpr=new FPR();<br></br>
				fpr.setIsOCT(isOct.getStringCellValue());//要取得cell資料要呼叫getStringCellValue方法<br></br>
				fpr.setAff(aff.getStringCellValue());    //不同的資料型態有不同的方法<br></br>
				fpr.setCode(code.getStringCellValue());<br></br>
				fpr.setOriginalNo(fprNo.getStringCellValue());<br></br>
				fprlist.add(fpr);<br></br>
				System.out.println(code);<br></br>
//				System.out.println(isOct.getStringCellValue()+", "+<br></br>
//				fprNo.getStringCellValue()+", "+aff.getStringCellValue()+", "+code.getStringCellValue());<br></br>
			}<br></br>
			System.out.println(rows-1);<br></br>
			System.out.println(fprlist.size());<br></br>
		}catch(Exception e){<br></br>
			e.printStackTrace();<br></br>
		}<br></br>
	}<br></br>
}

上一篇
使用NIO2中的AsynchronousFileChannel-還不是很懂
下一篇
使用Enum以及EnumSet in Java
系列文
java菜鳥的學習筆記28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
ted99tw
iT邦高手 1 級 ‧ 2012-10-24 23:01:05

讚讚讚

不知這程式碼怎麼搞的都會自動加上<br>,我波的文也有,害我只能改用圖形檔。

0
s9771073
iT邦新手 5 級 ‧ 2014-10-28 16:28:10

那如何從Xpages上產出EXCEL報表呢?

我要留言

立即登入留言