本文提供一个基于ADF Face组件开发样例工程,实现Excel导入开发中常见的处理。

    1.文件上传处理

    2.读取Excel单元格内容


本文是基于“ADF Faces导出Excel文件【附样例工程】”编写的,会省去许多细节部分的介绍,若理解困难的话,可以先看导出Excel部分。


实现的基本思路:

1. 应用ADF Faces的文件上传组件完成用户文件选取的交互,将其与后台ManagedBean建立值绑定,在表单提交时,文件上传组件封装了上传的实现细节并将处理后的文件对象传入至ManagedBean的属性中。

2. 应用命令按钮触发表单提交事件,触发ManagedBean完成事件处理过程。

3.由ManagedBean完成文件内容的读取和后续处理。

注:需要设定JSP页面中Form标签的文件上传属性为true,否则文件不会被处理。



下面是样例工程的创建过程:


创建工程名为DemoExcelImp

ADF Faces导入Excel文件【附样例工程】_第1张图片


创建页面imp.jsp

ADF Faces导入Excel文件【附样例工程】_第2张图片


拖入文件上传组件(Input File组件)和按钮组件

ADF Faces导入Excel文件【附样例工程】_第3张图片


通过为按钮设定Action属性,创建后台ManagedBean,并完成提交事件的注册

ADF Faces导入Excel文件【附样例工程】_第4张图片

ADF Faces导入Excel文件【附样例工程】_第5张图片


为文件上传组件与Bean之间建立值绑定,将文件对象绑定至Bean的file属性中。

注意Bean的属性类型选取为UploadFile而不是File。

ADF Faces导入Excel文件【附样例工程】_第6张图片


点击空白区即视为选取Form组件,为其设定UsesUpload属性为true,否则不会处理文件上传组件。

ADF Faces导入Excel文件【附样例工程】_第7张图片


至此JSP页面编写完毕,一下是其源代码部分:

ADF Faces导入Excel文件【附样例工程】_第8张图片


    
        
            
            
        
    


为工程引入POI库处理Excel内容。

ADF Faces导入Excel文件【附样例工程】_第9张图片


编写管理Bean的事件处理代码,内容:

  1. 根据Excel不同版本建立Workbook对象

  2. 读取第1个sheet页面的第1行的每一个单元格

  3. 输出单元格的字符串内容

ADF Faces导入Excel文件【附样例工程】_第10张图片

    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 
  


运行imp.jsp,要处理的Excel有2行数据,预期处理第一行数据。

ADF Faces导入Excel文件【附样例工程】_第11张图片


选取文件,点击提交按钮,查看JDeveloper控制台输出的内容。

ADF Faces导入Excel文件【附样例工程】_第12张图片