/** * excel導入 * * @param file * @return */ @Transactional @Override public String importInstallManageExcel(FileItem file) { try { //服務器地址 String uploadRoot = "D:/"; //上傳的目錄 String uploadSubDir = "pic"; //圖片對應的行和圖片數據 Map<Integer, PictureData> sheetIndexPicMap = new HashMap<Integer, PictureData>(); //圖片對應的行和存放路徑 Map<Integer, String> path = new HashMap<Integer, String>(); Sheet sheet; if (file.getName().substring(file.getName().length() - 4).equals("xlsx")) { XSSFWorkbook workBook = new XSSFWorkbook(file.getInputStream()); sheet = workBook.getSheetAt(0); //讀取sheet的圖片放入Map for (POIXMLDocumentPart dr : ((XSSFSheet) sheet).getRelations()) { if (dr instanceof XSSFDrawing) { XSSFDrawing drawing = (XSSFDrawing) dr; List<XSSFShape> shapes = drawing.getShapes(); for (XSSFShape shape : shapes) { XSSFPicture pic = (XSSFPicture) shape; XSSFClientAnchor anchor = pic.getPreferredSize(); CTMarker ctMarker = anchor.getFrom(); sheetIndexPicMap.put(ctMarker.getRow(), pic.getPictureData()); //獲取圖片格式 String ext = pic.getPictureData().suggestFileExtension(); //保存的文件名 String fileName = UUID.randomUUID().toString() + "." + ext; path.put(ctMarker.getRow(), uploadSubDir + "/" + fileName); } } } } else { HSSFWorkbook workBook = new HSSFWorkbook(file.getInputStream()); sheet = workBook.getSheetAt(0); //讀取sheet的圖片放入Map List<HSSFPictureData> pictures = workBook.getAllPictures(); if (pictures.size() != 0) { for (HSSFShape shape : ((HSSFSheet) sheet).getDrawingPatriarch().getChildren()) { HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); if (shape instanceof HSSFPicture) { HSSFPicture pic = (HSSFPicture) shape; int pictureIndex = pic.getPictureIndex() - 1; HSSFPictureData picData = pictures.get(pictureIndex); sheetIndexPicMap.put(anchor.getRow1(), picData); //獲取圖片格式 String ext = picData.suggestFileExtension(); //保存的文件名 String fileName = UUID.randomUUID().toString() + "." + ext; path.put(anchor.getRow1(), uploadSubDir + "/" + fileName); } } } } if (sheet.getLastRowNum() == 0) { logger.error("表中無數據!"); return "表中無數據!"; } //定義數據集合存放excel全部數據 List<LockWorker> installManageList = new ArrayList<LockWorker>(); for (int i = 1; i <= sheet.getLastRowNum(); i++) { //錯誤提示消息 StringBuffer msg = new StringBuffer(); Row row = sheet.getRow(i); if (null == row) continue; LockWorker im = new LockWorker(); im.setInstallerPicture(path.get(i)); for (int j = 1; j < 12; j++) { Cell cell = row.getCell(j); String value = null; if (null != cell) { //所有做爲文本處理 cell.setCellType(HSSFCell.CELL_TYPE_STRING); value = cell.getStringCellValue(); } if (1 == j) {//姓名 if (StringUtils.isNotBlank(value)){ im.setInstallerName(value); }else { msg.append("請填寫姓名!\n"); } } else if (2 == j) {//備註 im.setRemark(value); } } if (!StringUtils.isBlank(msg.toString())) { logger.error("第\t" + i + "行: " + msg.toString()); return "第\t" + i + "行: " + msg.toString(); } installManageList.add(im); } if (!installManageList.isEmpty()) { if (!sheetIndexPicMap.isEmpty()) { for (Map.Entry<Integer, PictureData> map : sheetIndexPicMap.entrySet()) { // 獲取圖片流 PictureData pic = map.getValue(); byte[] data = pic.getData(); //輸出全路徑 String outPath = uploadRoot + path.get(map.getKey()); FileOutputStream out = new FileOutputStream(outPath); out.write(data); out.close(); } } //批量保存 installerManageMapper.batchInsert(installManageList); } } catch (Exception e) { logger.error("導入異常", e); return "系統異常"; } return "success"; }