今天因為工作需要就以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>
}