/*
* @(#)demo02
* @(#)demo.java 2014-7-3
*
* Copyright © 2001-2010, All rights reserved.
* iSoftStone Information Technology ( Group ) Co., Ltd.
*/
package demo02;
/**
* Description: TODO
* @ClassName: demo
* @author zhangmeijia 2014-7-3 下午02:50:54
* @see TODO
*/
public class demo {
//Description: 解析Excel文件
public List readExcel(final String fileName, HttpServletRequest req) throws Exception {
List UserList = null;
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) req;
MultipartFile multipartFile = multipartRequest.getFile("file");
InputStream in = multipartFile.getInputStream();
Workbook wb = null;//声明工作薄
wb = create(in);
// String hz = fileName.substring(fileName.lastIndexOf('.'), fileName.length()).toUpperCase();
// if (".XLS".equals(hz)) {
// wb = new HSSFWorkbook(new POIFSFileSystem(in));
// } else {
// wb = new XSSFWorkbook(in);
// }
//解析Excel文件内容,将其封装为实体集合,返回集合
UserList = analysis(wb);
return UserList;
}
public Workbook create(InputStream inp) throws Exception {
if (!inp.markSupported()) {
inp = new PushbackInputStream(inp, 8);
}
if (POIFSFileSystem.hasPOIFSHeader(inp)) {
log.error("2003及以下");
return new HSSFWorkbook(inp);
}
if (POIXMLDocument.hasOOXMLHeader(inp)) {
log.error("2007及以上");
return new XSSFWorkbook(OPCPackage.open(inp));
}
log.error("你的excel版本目前poi解析不了");
return null;
}
* Description: 解析。遍历所有数据
public List analysis(Workbook wb) throws Exception {
List UserList = new ArrayList();
try {
for (int k = 0; k < wb.getNumberOfSheets(); k++) {// 遍历每一个Sheet
Sheet sheet = wb.getSheetAt(k);
int rows = sheet.getPhysicalNumberOfRows();
List list = new ArrayList();
for (int r = 0; r < rows; r++) {//遍历每一行
if (r == 0) {
continue;
}
Row row = sheet.getRow(r);
if (row == null) {
continue;
}
int cells = row.getPhysicalNumberOfCells() + 1;// 每一行单元格数目
//1.解析一行数据为一个字符串
String str = analysisOneLineTdList(cells, row);
list.add(str);
}
//2.将数据字符串的集合,生成实体对象放入集合,并返回
List cusInfoList = getUserList(list);
for (User c : cusInfoList) {
UserList.add(c);
}
}
} catch (Exception e) {
log.error("Excel文件导入,analysis方法失败");
e.printStackTrace();
throw new Exception();
}
return UserList;
}
* Description: 解析每一行
public String analysisOneLineTdList(int cells, Row row) throws Exception {
String lineStr = "";
String str = "";
try {
for (short c = 0; c < cells; c++) {
Cell cell = row.getCell(c);
if (cell == null) {
str = "";
} else {
switch (cell.getCellType()) {// 单元格的类型
case Cell.CELL_TYPE_FORMULA:// 公式型
str = cell.getNumericCellValue() + "";
break;
case Cell.CELL_TYPE_NUMERIC:// 数值型
if (DateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
str = sdf.format(date).toString();
} else {
BigDecimal num = new BigDecimal(cell.getNumericCellValue());
str = String.valueOf(num);
}
break;
case Cell.CELL_TYPE_STRING:// 字符串型
str = cell.getRichStringCellValue().toString().replaceAll("'", "''");
break;
case Cell.CELL_TYPE_BOOLEAN:// 布尔型
str = cell.getBooleanCellValue() + "";
break;
case Cell.CELL_TYPE_BLANK:// 空值
str = "";
break;
case Cell.CELL_TYPE_ERROR:// 错误
str = "";
break;
default:
str = "";
}
}
lineStr = lineStr + " , " + str;
}
} catch (Exception e) {
log.error("Excel文件导入,解析一行analysisOneLineTdList方法失败");
e.printStackTrace();
throw new Exception();
}
lineStr = lineStr.replaceFirst(" , ", "");
return lineStr;// 以字符串返回该行的数据
}
* Description: 获取封装实体的集合
public List getUserList(List list) throws Exception {
List UserList = new ArrayList();
for (int r = 0; r < list.size(); r++) {
String rowsStr = list.get(r);
String[] td = rowsStr.split(" , ");
//数据限制
User ci = new User();
ci.setSerialNumber(td[0].trim());
ci.setOrderNo(td[1].trim());
ci.setProductCode(td[2].trim());
ci.setProductName(td[3].trim());
ci.setCustomerName(td[4].trim());
.....ci..
} catch (ParseException e) {
log.error("Excel文件导入,解析日期getUserList方法失败");
e.printStackTrace();
throw new Exception();
}
UserList.add(ci);
}
return UserList;
}
}