本文提供一個基於ADF Face組件開發樣例工程,實現Excel導入開發中常見的處理。
java
1.文件上傳處理jsp
2.讀取Excel單元格內容ide
本文是基於「ADF Faces導出Excel文件【附樣例工程】」編寫的,會省去許多細節部分的介紹,若理解困難的話,能夠先看導出Excel部分。spa
實現的基本思路:3d
1. 應用ADF Faces的文件上傳組件完成用戶文件選取的交互,將其與後臺ManagedBean創建值綁定,在表單提交時,文件上傳組件封裝了上傳的實現細節並將處理後的文件對象傳入至ManagedBean的屬性中。orm
2. 應用命令按鈕觸發表單提交事件,觸發ManagedBean完成事件處理過程。xml
3.由ManagedBean完成文件內容的讀取和後續處理。對象
注:須要設定JSP頁面中Form標籤的文件上傳屬性爲true,不然文件不會被處理。blog
下面是樣例工程的建立過程:事件
建立工程名爲DemoExcelImp
建立頁面imp.jsp
拖入文件上傳組件(Input File組件)和按鈕組件
經過爲按鈕設定Action屬性,建立後臺ManagedBean,並完成提交事件的註冊
爲文件上傳組件與Bean之間創建值綁定,將文件對象綁定至Bean的file屬性中。
注意Bean的屬性類型選取爲UploadFile而不是File。
點擊空白區即視爲選取Form組件,爲其設定UsesUpload屬性爲true,不然不會處理文件上傳組件。
至此JSP頁面編寫完畢,一下是其源代碼部分:
<f:view> <af:document title="imp.jsp" id="d1"> <af:form id="f1" usesUpload="true"> <af:inputFile label="文件上傳組件" id="if1" value="#{bean1.file}"/> <af:commandButton text="提交文件" id="cb1" action="#{bean1.doUploadFile}" /> </af:form> </af:document> </f:view>
爲工程引入POI庫處理Excel內容。
編寫管理Bean的事件處理代碼,內容:
根據Excel不一樣版本創建Workbook對象
讀取第1個sheet頁面的第1行的每個單元格
輸出單元格的字符串內容
public String doUploadFile() throws IOException { if (file == null) { return ""; } Workbook wb = null; //區分Excel文件版本2003或2007+ if (file.getFilename().matches(".*xls$")) { wb = new HSSFWorkbook(file.getInputStream()); } else if (file.getFilename().matches(".*xlsx$")) { wb = new XSSFWorkbook(file.getInputStream()); } else { System.out.println("文件類型錯誤!可接受Excel,請下載文件模板!"); return null; } //輸出第1個sheet頁中第1行數據的字符串內容 Sheet sheet = wb.getSheetAt(0); int rownum = sheet.getFirstRowNum(); Row row = sheet.getRow(rownum); for(int i=0;i<row.getLastCellNum();i++){ Cell c = row.getCell(i); c.setCellType(Cell.CELL_TYPE_STRING); System.out.println(c.getStringCellValue()); } return null; }
運行imp.jsp,要處理的Excel有2行數據,預期處理第一行數據。
選取文件,點擊提交按鈕,查看JDeveloper控制檯輸出的內容。