springMVC导入excle poi

来源:互联网 发布:芈月 铭文 知乎 编辑:程序博客网 时间:2024/05/16 02:48

页面部分:
<form action="${path}/user/fileUploadOrders" method="post" enctype="multipart/form-data" onsubmit="return excelSubmit();">  
    <font>选择excel文档:</font>
    <input type="file" name="file" id="fileUpload"> <button class="btn2" type="submit">导入订单详情</button>
</form>  

controller:

/**

* 读取excel
* @return
*/
@RequestMapping("/user/fileUploadOrders")
public String fileUploadOrders(@RequestParam("file") MultipartFile file,
HttpSession session) {
String url = "";
// 判断文件是否为空
if (!file.isEmpty()) {
String location = session.getServletContext().getRealPath("upload");


String str = file.getOriginalFilename().substring(
file.getOriginalFilename().indexOf("."),
file.getOriginalFilename().length());
// 文件绝对路径
url = location + "\\" + System.currentTimeMillis() + str;
// 文件类型不支持导入
if (!str.equals(".xlsx")) {
return "redirect:/users/toUserList?state=3";
}
try {
file.transferTo(new File(url));
excelService.startOrder(url);
} catch (IllegalStateException e) {
log.error("file transferto is error");
e.printStackTrace();
return "redirect:/users/toUserList?state=1";
} catch (IOException e) {
e.printStackTrace();
return "redirect:/users/toUserList?state=1";
} finally {
File f = new File(url);
if (f.isFile()) {
f.delete();
}

}

}
// 重定向
return "redirect:/users/toUserList?state=2";

}

//业务逻辑部分:

service层没有封装excel解析的代码,直接放一起了,大家可以把它封装到一个工具类,注意解析的excel后缀格式为.xlsx

public void startOrder(String path){
FileInputStream in = null;
try {
XSSFWorkbook workbook;
in = new FileInputStream(path);
workbook = new XSSFWorkbook(in);
XSSFSheet sheet =workbook.getSheet("Sheet1");
//获取excel文件中所有行对象
int rows = sheet.getPhysicalNumberOfRows();
//遍历行,row-1 过滤掉标题行
StringBuffer pidBefore = new StringBuffer("mm_m_122582841_");
for(int i=0;i<rows-1;i++){
//读取左上断单元格
XSSFRow row = sheet.getRow(i+1);
//行不能为空
if(row != null){
//获取所有列
int cells = row.getPhysicalNumberOfCells();
String value = "";
//遍历列
for(int j=0;j<cells;j++){
//获取列的值
XSSFCell cell = row.getCell(j);
if(cell != null){
//第五列为时间格式,第三行为电话号码,其他为字符串
if(j==6||j==7||j==12||j==13||j==14||j==15||j==18||j==20){
BigDecimal bg =new BigDecimal(cell.getNumericCellValue());
String str = bg.toPlainString();
value+=str+",";
}
else{
value+=cell.getStringCellValue()+",";
}
}
}
String[] order = value.split(",");

OrderDetails details =new OrderDetails();
int status = 0;
details.setOrderId(order[24]);
details.setGoodsId(order[3]);
details.setGoodsTitle(order[2]);
details.setGoodsShop(order[4]);
details.setGoodsCount(Integer.parseInt(order[6]));
details.setGoodsPrice(new BigDecimal(order[7]));
int index = order[17].indexOf("%");
details.setGoodsRate(new BigDecimal(order[17].substring(0,index-1)));
index = order[10].indexOf("%");
details.setTotalRate(new BigDecimal(order[10].substring(0,index-1)));
details.setPayMoney(new BigDecimal(order[12]));
details.setTotalEarnMoney(new BigDecimal(new BigDecimal(order[13]).doubleValue()));
details.setMemberEarnMoney(new BigDecimal(new BigDecimal(order[12]).multiply(new BigDecimal(order[17].substring(0,index-1))).multiply(new BigDecimal(0.7)).doubleValue()));
details.setMediaId(Integer.parseInt(order[28]));
details.setSpreadId(order[29]);
try {
details.setCreateTime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(order[0]));
} catch (ParseException e) {
e.printStackTrace();
}
//查询UserID
String userId = profilesMapper.getUserID(pidBefore.append(order[26]).append("_").append(order[28]).toString());
if("付款订单".equals(order[8])){
status=1;
}
else if("订单成功".equals(order[8])){
status=2;
}
else if("订单结算".equals(order[8])){
status=3;
}
else if("订单失效".equals(order[8])){
status=4;
}
details.setOrderState(status);
details.setUserId(userId);
OrderDetails od = orderDetailsMapper.checkOrderIsExist(order[24]);
//有记录则更新记录,没有则插入
if(od != null){
orderDetailsMapper.updateOrderDeTails(details);
}else{
orderDetailsMapper.insertInToOrderDeTails(details);
}
pidBefore.delete(0,pidBefore.length());
pidBefore.append("mm_m_122582841_");

}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
in.close();//关掉流,不然文档删除不掉
} catch (IOException e) {
e.printStackTrace();
}
}

}