本文提供一个基于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控制台输出的内容。