java导入带图片的excel表格
参考
目前使用 :Java读取Excel表格中的图片_java读取excel中的图片-CSDN博客
目前使用 :java使用POI读取Excel表格中的图片(包含嵌入单元格图片,浮动图片,xls-2003,xlsx-2007)_workbook解析excel中的图片-CSDN博客
java导入带图片的excel表格(工具HSSFWorkbook-HSSFSheet)(支持一条数据(单元格)可以导入多个图片,)_java导入excel带图片-CSDN博客
java 读取excel图片导入(亲测有效)_java excel导入图片-CSDN博客
java导入带图片的excel_mob649e816ab022的技术博客_51CTO博客
Java 读取Excel(xlsx)的内容及图片并保存 - 简书 (jianshu.com)
JAVA POI的使用_poi-3.10-final-CSDN博客
JAVA POI的excel中包含图片进行读取保存,单张图片,多张图片_java获取单元格是多个图片,保存数据库中-CSDN博客
java读取Excel,(支持WPS嵌入式图片)_java读取excel中的图片-CSDN博客
POI 读取excel图片并定位图片需要提前注意的事项_sheet.getrelations()-CSDN博客
Java读取Excel数值内容带.0或变科学计数法的解决办法 - Yaaaaa - 博客园 (cnblogs.com)
读取图片
不同版本的excel有不同的拓展名(.[xls](https://so.csdn.net/so/search?q=xls&spm=1001.2101.3001.7020) .xlsx),对应不同的方法。
所有的图片在excel中保存在一个集合中,以行列号为key,图片为value,将结果封装到map集合中,图片的格式为“HSSFPictureData”“XSSFPictureData”。
|
/** * 获取图片和位置 (xls) * @param sheet * @return * @throws IOException */ public static Map<String, HSSFPictureData> getPictures (HSSFSheet sheet) throws IOException { Map<String, HSSFPictureData> map = new HashMap<String, HSSFPictureData>(); List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren(); for (HSSFShape shape : list) { if (shape instanceof HSSFPicture) { HSSFPicture picture = (HSSFPicture) shape; HSSFClientAnchor cAnchor = picture.getClientAnchor(); HSSFPictureData pdata = picture.getPictureData(); String key = cAnchor.getRow1() + "-" + cAnchor.getCol1(); // 行号-列号 map.put(key, pdata); } } return map; } /** * 获取图片和位置 (xlsx) * @param sheet * @return * @throws IOException */ public static Map<String, XSSFPictureData> getPictures (XSSFSheet sheet) throws IOException { Map<String, XSSFPictureData> map = new HashMap<String, XSSFPictureData>(); List<POIXMLDocumentPart> list = sheet.getRelations(); for (POIXMLDocumentPart part : list) { if (part instanceof XSSFDrawing) { XSSFDrawing drawing = (XSSFDrawing) part; List<XSSFShape> shapes = drawing.getShapes(); for (XSSFShape shape : shapes) { XSSFPicture picture = (XSSFPicture) shape; XSSFClientAnchor anchor = picture.getPreferredSize(); CTMarker marker = anchor.getFrom(); String key = marker.getRow() + "-" + marker.getCol(); map.put(key, picture.getPictureData()); } } } return map; }
|
从map拿到图片使用输出流将图片保存在本地
PictureData picData = map.get(hang-1+":"+20); String ext = picData.suggestFileExtension();//获取图片的后缀名 byte[] data = picData.getData(); String fileName = UUID.randomUUID().toString(); //文件夹路径:temporarypath String temporarypath = FtpPropertiesLoader.get("star"); FileOutputStream out = new FileOutputStream(star + fileName + ext); out.write(data); out.close();
|
自己开发时写的的代码
@Transactional public ResultData databaseVendorInfoSizeInfo(MultipartFile file) { try { // System.out.println("开始时间" + new Date().toString()); Workbook book; String originalFilename = file.getOriginalFilename(); String fileType = Objects.requireNonNull(originalFilename) .substring(originalFilename.lastIndexOf(".") + 1); Map<String, HSSFPictureData> HSSFPictureMap = new HashMap<String, HSSFPictureData>(); Map<String, XSSFPictureData> XSSFPictureMap = new HashMap<String, XSSFPictureData>(); if ("xls".equalsIgnoreCase(fileType)) { book = new HSSFWorkbook(file.getInputStream());// 2003版本office String fileName = originalFilename.substring(0, originalFilename.lastIndexOf(".")); int numberOfSheets = book.getNumberOfSheets(); if (numberOfSheets > 1) { return ResultData.fail(fileName + "Sheet页大于1"); } HSSFSheet sheet = (HSSFSheet) book.getSheetAt(0); HSSFPictureMap = getHSSFSheetPictures(sheet); } else { book = new XSSFWorkbook(file.getInputStream());// 判断是否是2007版本office String fileName = originalFilename.substring(0, originalFilename.lastIndexOf(".")); int numberOfSheets = book.getNumberOfSheets(); if (numberOfSheets > 1) { return ResultData.fail(fileName + "Sheet页大于1"); } XSSFSheet sheet = (XSSFSheet) book.getSheetAt(0); XSSFPictureMap = getXSSFSheetPictures(sheet); } String userCode = UserUtils.getUserCode(); Date now = new Date(); VarConfig uploadFilePathConfig = varConfigMapper.getVarConfig("upload_file_path"); if (ObjectUtil.isNull(uploadFilePathConfig)) { return ResultData.fail("NoUploadFilePath"); } VarConfig urlConfig = varConfigMapper.getVarConfig("product_url"); if (ObjectUtil.isNull(urlConfig)) { return ResultData.fail("NotPostTaskUrl"); } String cp = "/"; String path = uploadFilePathConfig.getValue(); path = path.replace("\\", cp); if (path.lastIndexOf(cp) != path.length() - 1) { path = path + cp; } String filePath = urlConfig.getValue(); if (filePath.lastIndexOf(cp) != filePath.length() - 1) { filePath = filePath + cp; } Sheet sheet = book.getSheetAt(0); int lastRowNum = sheet.getLastRowNum(); if (lastRowNum <= 3) { return ResultData.fail("系统查看要导的数据为空,请导入数据"); } for (int i = 3; i <= lastRowNum; i++) { Row row = sheet.getRow(i); if (null != row) { boolean rowEmpty = isRowEmpty(row); if (rowEmpty) { continue; } //获取浮动图片 if ("xls".equalsIgnoreCase(fileType)) { PictureData hssfPictureData = HSSFPictureMap.get(i + "-" + 1); if (null != hssfPictureData) { byte[] data = hssfPictureData.getData(); String end = hssfPictureData.suggestFileExtension(); String uuid = UUID.randomUUID().toString(); String pictureFileName = uuid + "." + end; upload(data, pictureFileName, path + filePath + cp); } } else { PictureData xssfPictureData = XSSFPictureMap.get(i + "-" + 1); if (null != xssfPictureData) { byte[] data = xssfPictureData.getData(); String end = xssfPictureData.suggestFileExtension(); String uuid = UUID.randomUUID().toString(); String pictureFileName = uuid + "." + end; upload(data, pictureFileName, path + filePath + cp); } } } // System.out.println("结束时间" + new Date().toString()); } catch (Exception e) { e.getMessage(); e.getStackTrace(); return ResultData.fail("请求异常" + e.getMessage()); } return ResultData.succeed(); }
|
/** * 获取图片和位置 (xls) * * @param sheet * @return * @throws IOException */ public static Map<String, HSSFPictureData> getHSSFSheetPictures(HSSFSheet sheet) throws IOException { Map<String, HSSFPictureData> map = new HashMap<String, HSSFPictureData>(); List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren(); for (HSSFShape shape : list) { if (shape instanceof HSSFPicture) { HSSFPicture picture = (HSSFPicture) shape; HSSFClientAnchor cAnchor = picture.getClientAnchor(); HSSFPictureData pdata = picture.getPictureData(); String key = cAnchor.getRow1() + "-" + cAnchor.getCol1(); // 行号-列号 map.put(key, pdata); } } return map; }
/** * 获取图片和位置 (xlsx) * * @param sheet * @return * @throws IOException */ public static Map<String, XSSFPictureData> getXSSFSheetPictures(XSSFSheet sheet) throws IOException { Map<String, XSSFPictureData> map = new HashMap<String, XSSFPictureData>(); List<POIXMLDocumentPart> list = sheet.getRelations(); for (POIXMLDocumentPart part : list) { if (part instanceof XSSFDrawing) { XSSFDrawing drawing = (XSSFDrawing) part; List<XSSFShape> shapes = drawing.getShapes(); for (XSSFShape shape : shapes) { XSSFPicture picture = (XSSFPicture) shape; XSSFClientAnchor anchor = picture.getPreferredSize(); CTMarker marker = anchor.getFrom(); String key = marker.getRow() + "-" + marker.getCol(); map.put(key, picture.getPictureData()); } } } return map; }
/** * 上传文件 */ public static String upload(byte[] fileByte, String fileName, String fileDir) throws IOException { File file = new File(fileDir + fileName); if (!file.exists()) { //判断要目标文件夹是否存在不存在则创建 File parentFile = file.getParentFile(); if (!parentFile.exists()) { parentFile.mkdirs(); } file.createNewFile(); } else { file.delete(); file.createNewFile(); } FileOutputStream out = new FileOutputStream(file); out.write(fileByte); out.close(); return fileName; }
/** * 判断是否空行 */ public static boolean isRowEmpty(Row row) { for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) { Cell cell = row.getCell(c); if (cell != null && cell.getCellType() != CellType.BLANK) return false; } return true; }
|