赞
踩
excel的图片并不是直接嵌入单元格中的,但是在插入图片时可以设置图片格式,将图片放入单元格中,代码就可以根据行号与列号定位到响应的图片。
不同版本的excel有不同的拓展名(.xls .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("temporarypath");
- FileOutputStream out = new FileOutputStream(temporarypath + fileName + ".jpg");
- out.write(data);
- out.close();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。