ADF Faces導入Excel文件【附樣例工程】


本文提供一個基於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

wKioL1i_cGqgV-EuAADJBtc6Sls638.png-wh_50


建立頁面imp.jsp

wKiom1i_cGvx2YInAAAuKB4H6fU074.png-wh_50


拖入文件上傳組件(Input File組件)和按鈕組件

wKioL1i_cGvS1IeXAAFzdv2091U347.png-wh_50


經過爲按鈕設定Action屬性,建立後臺ManagedBean,並完成提交事件的註冊

wKioL1i_cGzjFqnMAAFQw_QAdbQ799.png-wh_50

wKiom1i_cG2xnAcyAADDn_U_D_U780.png-wh_50


爲文件上傳組件與Bean之間創建值綁定,將文件對象綁定至Bean的file屬性中。

注意Bean的屬性類型選取爲UploadFile而不是File。

wKioL1i_cG6yso-0AAFHbiXOEGo966.png-wh_50


點擊空白區即視爲選取Form組件,爲其設定UsesUpload屬性爲true,不然不會處理文件上傳組件。

wKiom1i_cHCjDOMrAACGGx7TI1M863.png-wh_50


至此JSP頁面編寫完畢,一下是其源代碼部分:

wKiom1i_cG7AHU6uAABb6-4Nk4Y042.png-wh_50

<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內容。

wKioL1i_cG_Bz7qbAADWLKtGe0Q617.png-wh_50


編寫管理Bean的事件處理代碼,內容:

  1. 根據Excel不一樣版本創建Workbook對象

  2. 讀取第1個sheet頁面的第1行的每個單元格

  3. 輸出單元格的字符串內容

wKiom1i_cG-DFVceAAEVHqvZvYs704.png-wh_50

    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行數據,預期處理第一行數據。

wKioL1i_cHDDtzUMAACWIfYXwZU058.png-wh_50


選取文件,點擊提交按鈕,查看JDeveloper控制檯輸出的內容。

wKioL1i_cHGyiknkAAEZdtXzOzc209.png-wh_50

相關文章
相關標籤/搜索