javaExcel檔案上傳和下載
阿新 • • 發佈:2018-11-05
上傳在頁面必須加上下面屬性
<form method="post" enctype="multipart/form-data" target="frameFile" action="${vehiclePath }/bindVehicle?${_csrf.parameterName}=${_csrf.token}&userId=${condition.userId }">
後臺方法
@RequestMapping(value="bindVehicle") @PreAuthorize(value=SecuritySettings.DENY_ON_READ_ONLY_ENV) public void bindVehicle(@RequestParam("vbfile") MultipartFile file, @RequestParam Long userId, HttpServletResponse response, HttpServletRequest request) throws IOException { String status = ApplicationKeys.SUCC; String message = ""; PrintWriter out = response.getWriter(); log.info("bindVehicle::::::::::::::::::::"); boolean failure=false; if(!file.getOriginalFilename().endsWith(".xlsx") && !file.getOriginalFilename().endsWith(".xls") ) { status = ApplicationKeys.FAIL; message = "onlyExcel"; failure=true; }else { try { List<VehicleBatchBindingDto> vehiclebinds = this.buildVehicleBinds(file); if(vehiclebinds.size() > 50) { status = ApplicationKeys.FAIL; message = "excelLengthError"; failure=true; }else { List<VehicleBindResultDto> results = this.vehiclebtServiceImpl.bindVehicleTwo(vehiclebinds, userId); SessionUtils.setAttribute(request, ApplicationKeys.BIND_RESULTS, (ArrayList<VehicleBindResultDto>)results); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); status = ApplicationKeys.FAIL; message = "error"; failure=true; } } OperationUtil.adminLog(userId, OperationKeys.UPLOAD_VEHICLE_EXCEL, null, failure?StatusKeys.FAILURE:StatusKeys.SUCCESS, null, OperationTypeKeys.VEHICLE_MGMT, message); response.setContentType("text/html;charset=UTF-8"); out.println("<script name='testsp'>parent.bindVehicleCallback('"+status+"','"+message+"')</script>");}
public List<VehicleBatchBindingDto> buildVehicleBinds(MultipartFile file) throws IOException { List<VehicleBatchBindingDto> vehiclebinds = new ArrayList<VehicleBatchBindingDto>(); VehicleBatchBindingDto vb = null; //不能超過16列 InputStream is = new ByteArrayInputStream(file.getBytes()); Workbook workbook = new XSSFWorkbook(is); Sheet sheet = workbook.getSheetAt(0); int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();//總列數 int rowNum=sheet.getLastRowNum();//總行數 if(coloumNum!=19||rowNum<1){ throw new RuntimeException("Excel Row Or Coloum size is error!"); }else{ for(int j=0;j<coloumNum;j++){ Row row = sheet.getRow(0); if(row.getCell(j)==null){ throw new RuntimeException("Excel Row Or Coloum size is error!"); } } for (int i = 1; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); if(isEmptyRow(row)) { continue; } //acc_no acct_province acct_city longitude經度 latitude radius vb = new VehicleBatchBindingDto(); vb.setUsername(this.getCellValue(row.getCell(0))); vb.setFleetname(this.getCellValue(row.getCell(1))); vb.setVin(this.getCellValue(row.getCell(2)));//車架號 vb.setPlateId(this.getCellValue(row.getCell(3))); vb.setModel(this.getCellValue(row.getCell(4))); vb.setDriver(this.getCellValue(row.getCell(5))); vb.setEmail(this.getCellValue(row.getCell(6))); vb.setTelephone(this.getCellValue(row.getCell(7)));//報警接受手機號碼 vb.setPackagecode(this.getCellValue(row.getCell(8)).replaceAll(",", ",")); String std=this.getCellValue(row.getCell(9)); String edd=this.getCellValue(row.getCell(10)); if(null!=std&&!"".equals(std)){ vb.setDocked_stdate(std); } if(null!=edd&&!"".equals(edd)){ vb.setDocked_eddate(edd); } vb.setOperationtype(this.getCellValue(row.getCell(11))); String rdv=StringUtil.isNullToEmpty(this.getCellValue(row.getCell(12))); if(rdv.contains("KM")||rdv.contains("km")||rdv.contains("Km")||rdv.contains("kM")){ vb.setRadius(rdv.replace("km", "KM")); }else{ if(!rdv.equals("")){ vb.setRadius(rdv+"KM"); }else{ vb.setRadius("0KM"); } } vb.setLongitude(this.getCellValue(row.getCell(13))); vb.setLatitude(this.getCellValue(row.getCell(14))); vb.setAlertphonenumber(this.getCellValue(row.getCell(15))); vb.setAccno(this.getCellValue(row.getCell(16))); vb.setFranchisercode(this.getCellValue(row.getCell(17))); vb.setFranchisername(this.getCellValue(row.getCell(18))); vehiclebinds.add(vb); } } log.info("vehiclebinds size :::: "+vehiclebinds.size()); return vehiclebinds; }
下載
HSSFWorkbook wb = this.vehicleBindingServiceImpl.createExl(results,where,startd, endd);
response.setContentType("application/vnd.ms-excel");
if(tp.equals("5")){
response.setHeader("Content-disposition", "attachment;filename=user_operationLog.xls");
}else{
response.setHeader("Content-disposition", "attachment;filename=fleet_list.xls");
}
OutputStream ouputStream = null ;
try {
response.flushBuffer();
ouputStream = response.getOutputStream();
wb.write(ouputStream);
} catch (IOException e) {
mes = e.getMessage();
failure = true;
}finally{try {
ouputStream.flush();
ouputStream.close();
} catch (IOException e) {
mes = e.getMessage();
failure = true;
}}}
下面是createexl方法
int[] excelHeaderWidths = {150,150,150,150,150,150,150,150, 180, 100, 100, 100, 150,200};
int[] excelHeaderWidth=null;
String[] excelHeader={};
String[] waitlist = {"編號","車架號","車型","車牌","使用人","聯絡方式","公司名稱","繫結時間","操作狀態"};
excelHeader=all;
excelHeaderWidth=excelHeaderWidths;
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("sheet1");
HSSFRow row = sheet.createRow((int) 0);
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
HSSFCellStyle rowstyle = wb.createCellStyle();
rowstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
for (int i = 0; i < excelHeader.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(excelHeader[i]);
cell.setCellStyle(style);
sheet.setColumnWidth(i, 32 * excelHeaderWidth[i]);
}
for(int i=0;i<vehiclelist.size();i++){
row=sheet.createRow(i+1);
VehicleBadingListDto vh=vehiclelist.get(i);
row.createCell(0).setCellValue(i);
row.createCell(1).setCellValue(vh.getVIN()+"");
}
return wb;
}