//Excel解析方法
public List<Map> readXlss(String path,InputStream fi,int beginColumn,int fieldCount) throws IOException{
List<Map> maps = new LinkedList<Map>();
Map map = null;
InputStream is = null;
try{
if(fi != null){
is = fi;
}else{
is = new FileInputStream(path);
}
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
//循环工作表Sheet
for(int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++){
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if(hssfSheet == null){
continue;
}
//循环行Row
for(int rowNum = beginColumn; rowNum <= hssfSheet.getLastRowNum(); rowNum++){
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if(hssfRow == null){
continue;
}
map = new HashMap();
for(int i=0;i<=fieldCount;i++){
map.put(i, getValue(hssfRow.getCell(i)));
}
maps.add(map);
}
}
}catch (Exception e) {
MailConstant.WriterLine("#Excel Error ["+e.getMessage()+"] "+System.currentTimeMillis());
}
return maps;
}
private String getValue(HSSFCell hssfCell){
String val = "";
try {
if(null != hssfCell) {
switch(hssfCell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
if (HSSFDateUtil.isCellDateFormatted(hssfCell)) {
//如果是date类型则 ,获取该cell的date值
val = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(HSSFDateUtil.getJavaDate(hssfCell.getNumericCellValue()));
} else { // 纯数字
val = String.valueOf(hssfCell.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
val = hssfCell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
break;
default:
break;
}
}
} catch (Exception e) {
return "";
}
return val;
}
以上是解析Excel的通用方法,将excel解析为List<Map>的方式进行返回使用。readXlss方法具有双重参数,既可以传文件路径解析,也可以直接传 文件流,优选判断文件流。
前端的jsp表单:
<s:form name="sbform" id="sbform" method="post" enctype="multipart/form-data" action="*.action">
<table width="80%" align="left">
<tr>
<td align="left">
Excel路径:<s:file name ="myFile" label ="Excel File" ></s:file>
</td>
</tr>
<tr>
<td align="left">
<input id="btn" type="submit" value=" 保 存 " οnclick="">
</td>
</tr>
</table>
</s:form>
Struts2 action中的字段:
private File myFile;
Struts2 action中的业务处理
InputStream is = new FileInputStream(myFile);
//获取excel文件列表数据
List<Map> maps = readXlss(" ",is,1,14);