1.导入
@RequestMapping(value = "importExcelPartInfo.do", method = RequestMethod.POST, headers = { "Accept=application/html" }) public void importExcelPartInfo(HttpServletRequest request,@RequestPart(value = "file") MultipartFile[] uploadfiles,HttpServletResponse response) throws Exception { Map<String, Object> where = DataConvertHelper.getRequestParam(request); UploadResult uploadResult = new UploadResult(); ListResult<Map<String, Object>> result = new ListResult<>(); try { String newPath = DataConvertHelper.getImportPath("mp/iwms/"); String realPath = request.getSession().getServletContext().getRealPath("")+ newPath; File dir = new File(realPath); if (!dir.isDirectory()){ dir.mkdirs(); } String fileformat = "xlsx|xls|"; boolean FileFlag = false; for (MultipartFile multipartFile : uploadfiles) { if (fileformat.indexOf(FilenameUtils.getExtension( multipartFile.getOriginalFilename()).toLowerCase() + "|") < 0) { FileFlag = true; break; } } if (FileFlag) { uploadResult.setResult("3"); uploadResult.setMsg("格式错误,请重新输入"); // 上传文件格式不对 returnHtml(uploadResult, response); return ; } for (MultipartFile multipartFile : uploadfiles) { String filename = multipartFile.getOriginalFilename(); File saveFile = new File(realPath, filename); multipartFile.transferTo(saveFile); String[] columnNames = {"PART_NO","FORM_PART_NO","PART_NAME_CN","PART_NAME_EN","PART_UNIT" ,"MAN_MODEL", "PART_USE","IS_RETORACTIVITY","IS_ENABLE"}; String fileName = realPath + File.separator + filename; List<Map<String, Object>> dataList = new ExcelHelper<>().readDataFromExcel(fileName, columnNames, 1); if (dataList != null && dataList.size() > 0) { //此处进行循环获取sql进行批处理,或传入一个List result = partInformationBIZ.importExcelPartInfo(dataList,where); uploadResult.setMsg(result.getMsg()); uploadResult.setResult(result.getResult()); } if(uploadResult.getResult().equals("0")){ JSONObject obj= JSONObject.fromObject(uploadResult.getMsg()); Object ob= obj.get("rows"); List<Map<String,Object>> upload = (List<Map<String,Object>>)ob; // String orgchange=""; String[] columnNames2 = { "PART_NO","FORM_PART_NO","PART_NAME_CN","PART_NAME_EN","PART_UNIT" ,"MAN_MODEL", "PART_USE","IS_RETORACTIVITY","IS_ENABLE","IS_TRUE"}; String[] titleNames = { "零件编号", "零件显示编号" , "中文名" , "英文名" , "计量单位" ,"厂家型号", "用途说明" ,"是否追塑件" ,"是否可用" , "错误提示" }; // 判断路径是否存在,不存在则创建 // File dir = new File(realPath); // if (!dir.isDirectory()) // dir.mkdirs(); String sheetName = "零件信息导入数据更正"; String fileName2 = realPath + File.separator + sheetName + ".xlsx"; new ExcelHelper<>().writeDataToExcel(fileName2, sheetName, titleNames, columnNames2, upload); String ip = request.getLocalAddr(); int port = request.getLocalPort(); System.out.println("port:"+port); String downloadUrl = "/" + newPath.replace(File.separator, "/") + "/" + sheetName + ".xlsx"; // downloadUrl = request.getScheme()+"://"+ip+":"+port + downloadUrl; // downloadUrl = downloadUrl; uploadResult.setDownloadUrl(downloadUrl); returnHtml(uploadResult, response); } } } catch (Exception e) { logger.error("异常信息:" + e.getMessage(), e); uploadResult.setResult(Globals.FAIL_CODE); uploadResult.setMsg("导入失败"); //导入失败 } returnHtml(uploadResult, response); return ; }
(2)returnHtml()方法
private void returnHtml(UploadResult uploadResult, HttpServletResponse response) { try { JSONObject jsonObject = JSONObject.fromObject(uploadResult); String jsonStr = jsonObject.toString(); response.setContentType("text/html;charset=UTF-8"); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); response.getWriter().write(jsonStr); response.getWriter().flush(); response.getWriter().close(); } catch (Exception e) { e.printStackTrace(); } }
(3)解析excel文件
/** * 解析Excel文件 * * @param fileName * Excel文件名 * @param columnNames * 字段名称,作为Map的key值 * @param startIndex * sheet中数据开始行,下标从0开始 * @return List<Map<String, Object>>数据 * @throws Exception */ public List<Map<String, Object>> readDataFromExcel(String fileName, String[] columnNames, int startIndex) throws Exception { List<Map<String, Object>> data = new ArrayList<Map<String, Object>>(); FileInputStream fis = new FileInputStream(fileName); Workbook workbook = WorkbookFactory.create(fis); Sheet sheet = null; int sheetNum = workbook.getNumberOfSheets(); for (int i = 0; i < sheetNum; i++) { sheet = workbook.getSheetAt(i); data.addAll(readSheet(sheet, columnNames, startIndex)); } return data; }
(4)
* 解析sheet,返回List<Map<String, Object>>类型数据 * * @param sheet * Sheet对象 * @param columnNames * 字段名称,作为Map的key值 * @param startIndex * 开始读取数据的行 * @return List<Map<String, Object>>数据 */ private List<Map<String, Object>> readSheet(Sheet sheet, String[] columnNames, int startIndex) { List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>(); Row row = null; int rowNum = sheet.getPhysicalNumberOfRows(); for (int i = startIndex; i < rowNum; i++) { Map<String, Object> map = new HashMap<String, Object>(); row = sheet.getRow(i); for (int j = 0; j < columnNames.length; j++) { map.put(columnNames[j], readCellValue(row.getCell(j))); } mapList.add(map); } return mapList; }
(5)
/** * 读取Excel格子中的值 * * @param c * Excel中的格子对象 * @return Object 数据 */ @SuppressWarnings("deprecation") private Object readCellValue(Cell c) { DecimalFormat df = new DecimalFormat("0"); if (c == null) { return ""; } else { switch (c.getCellType()) { case Cell.CELL_TYPE_BLANK: return ""; case Cell.CELL_TYPE_BOOLEAN: return c.getBooleanCellValue(); case Cell.CELL_TYPE_ERROR: return c.getErrorCellValue(); case Cell.CELL_TYPE_FORMULA: return c.getCellFormula(); case Cell.CELL_TYPE_NUMERIC: //String dataFormat = c.getCellStyle().getDataFormatString(); if (DateUtil.isCellDateFormatted(c)) { SimpleDateFormat sdf; //331844 功能服务关系管理,导入文件时,某个单元格只包含整数或日期,导入数据格式显示不一致 ,否则显示为Sun Jan 17 00:00:00 CST 2016 Date d=c.getDateCellValue(); //直接返回显示为Sun Jan 17 00:00:00 CST 2016 if(d.getHours()==0 && d.getMinutes()==0 && d.getSeconds()==0){ sdf=new SimpleDateFormat("yyyy-MM-dd"); }else{ sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } return sdf.format(d); } else{ return df.format(c.getNumericCellValue()); //数字型 } case Cell.CELL_TYPE_STRING: return c.getStringCellValue(); } return "Unknown Cell Type:" + c.getCellType(); } }
* 获取导入文件的地址 * path = mp/dff/模块 * @return * @author 李祖一 */ public static String getImportPath(String path) { return path + "importDffService" + File.separator + DateTimeHelper.getCurrentTime("yyyyMMdd") + File.separator + StringHelper.GetGUID(); }