本文提供一个基于ADF Face组件开发样例工程,实现Excel导入开发中常见的处理。
1.文件上传处理
2.读取Excel单元格内容
本文是基于“ADF Faces导出Excel文件【附样例工程】”编写的,会省去许多细节部分的介绍,若理解困难的话,可以先看导出Excel部分。
实现的基本思路:
1. 应用ADF Faces的文件上传组件完成用户文件选取的交互,将其与后台ManagedBean建立值绑定,在表单提交时,文件上传组件封装了上传的实现细节并将处理后的文件对象传入至ManagedBean的属性中。
2. 应用命令按钮触发表单提交事件,触发ManagedBean完成事件处理过程。
3.由ManagedBean完成文件内容的读取和后续处理。
注:需要设定JSP页面中Form标签的文件上传属性为true,否则文件不会被处理。
下面是样例工程的创建过程:
创建工程名为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控制台输出的内容。
转载于:https://blog.51cto.com/zglei/1904255