Excel注解图片导入兼容xls
This commit is contained in:
		
							parent
							
								
									5139265d32
								
							
						
					
					
						commit
						3003bb0f50
					
				| 
						 | 
					@ -19,6 +19,12 @@ import java.util.Set;
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
import java.util.stream.Collectors;
 | 
					import java.util.stream.Collectors;
 | 
				
			||||||
import javax.servlet.http.HttpServletResponse;
 | 
					import javax.servlet.http.HttpServletResponse;
 | 
				
			||||||
 | 
					import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
 | 
				
			||||||
 | 
					import org.apache.poi.hssf.usermodel.HSSFPicture;
 | 
				
			||||||
 | 
					import org.apache.poi.hssf.usermodel.HSSFPictureData;
 | 
				
			||||||
 | 
					import org.apache.poi.hssf.usermodel.HSSFShape;
 | 
				
			||||||
 | 
					import org.apache.poi.hssf.usermodel.HSSFSheet;
 | 
				
			||||||
 | 
					import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 | 
				
			||||||
import org.apache.poi.ooxml.POIXMLDocumentPart;
 | 
					import org.apache.poi.ooxml.POIXMLDocumentPart;
 | 
				
			||||||
import org.apache.poi.ss.usermodel.BorderStyle;
 | 
					import org.apache.poi.ss.usermodel.BorderStyle;
 | 
				
			||||||
import org.apache.poi.ss.usermodel.Cell;
 | 
					import org.apache.poi.ss.usermodel.Cell;
 | 
				
			||||||
| 
						 | 
					@ -185,7 +191,16 @@ public class ExcelUtil<T>
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            throw new IOException("文件sheet不存在");
 | 
					            throw new IOException("文件sheet不存在");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        Map<String, PictureData> pictures = getSheetPictrues((XSSFSheet) sheet, (XSSFWorkbook) wb);
 | 
					        boolean isXSSFWorkbook = !(wb instanceof HSSFWorkbook);
 | 
				
			||||||
 | 
					        Map<String, PictureData> pictures;
 | 
				
			||||||
 | 
					        if (isXSSFWorkbook)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            pictures = getSheetPictrues07((XSSFSheet) sheet, (XSSFWorkbook) wb);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            pictures = getSheetPictrues03((HSSFSheet) sheet, (HSSFWorkbook) wb);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        // 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1
 | 
					        // 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1
 | 
				
			||||||
        int rows = sheet.getLastRowNum();
 | 
					        int rows = sheet.getLastRowNum();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -318,12 +333,8 @@ public class ExcelUtil<T>
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator());
 | 
					                            val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator());
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else if (ColumnType.IMAGE == attr.cellType())
 | 
					                        else if (ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures))
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            if (StringUtils.isNull(pictures))
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                                val = "";
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                            PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey());
 | 
					                            PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey());
 | 
				
			||||||
                            if (image == null)
 | 
					                            if (image == null)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
| 
						 | 
					@ -1179,13 +1190,46 @@ public class ExcelUtil<T>
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 获取Excel图片
 | 
					     * 获取Excel2003图片
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param sheet 当前sheet对象
 | 
					     * @param sheet 当前sheet对象
 | 
				
			||||||
     * @param workbook 工作簿对象
 | 
					     * @param workbook 工作簿对象
 | 
				
			||||||
     * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
 | 
					     * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static Map<String, PictureData> getSheetPictrues(XSSFSheet sheet, XSSFWorkbook workbook)
 | 
					    public static Map<String, PictureData> getSheetPictrues03(HSSFSheet sheet, HSSFWorkbook workbook)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
 | 
				
			||||||
 | 
					        List<HSSFPictureData> pictures = workbook.getAllPictures();
 | 
				
			||||||
 | 
					        if (!pictures.isEmpty())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            for (HSSFShape shape : 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);
 | 
				
			||||||
 | 
					                    String picIndex = String.valueOf(anchor.getRow1()) + "_" + String.valueOf(anchor.getCol1());
 | 
				
			||||||
 | 
					                    sheetIndexPicMap.put(picIndex, picData);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return sheetIndexPicMap;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return sheetIndexPicMap;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 获取Excel2007图片
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param sheet 当前sheet对象
 | 
				
			||||||
 | 
					     * @param workbook 工作簿对象
 | 
				
			||||||
 | 
					     * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static Map<String, PictureData> getSheetPictrues07(XSSFSheet sheet, XSSFWorkbook workbook)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
 | 
					        Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
 | 
				
			||||||
        for (POIXMLDocumentPart dr : sheet.getRelations())
 | 
					        for (POIXMLDocumentPart dr : sheet.getRelations())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue