Java解析excel表格中的图片的方式

    我们要用java解析首先得在项目中引入解析excel的相关包,我们这里使用的是apache的poi-3.12.jar来做开发。

    首先获取excel文件,获取文件的方式这里就不细说了,获取到文件后,将文件转成文件输入流

FileInputStream fis = new FileInputStream(new File(pathname));//pathname文件路径

    定义方法getPictureFromExcel(FileInputStream fis, int sheetNum),接收输入流fis,和Excel表中的sheet编号,即在第几张表格中。方法返回值为一个Map<String,PictureData>,引入org.apache.poi.ss.usermodel.PictureData对象:

import org.apache.poi.ss.usermodel.PictureData;

     通过WorkbookFactory这个工厂通过输入流获取到HSSFWorkbook对象,引入两个包:

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

    具体实现方法如下:

 /**
     * 获取excel表中的图片
     * @return
     * @Param fis 文件输入流
     * @Param sheetNum Excel表中的sheet编号
     * @throws IOException 
     * @throws InvalidFormatException 
     * @throws EncryptedDocumentException 
     */
    public Map<String, PictureData> getPictureFromExcel(FileInputStream fis, int 
sheetNum) throws EncryptedDocumentException, InvalidFormatException, IOException{
    	 //创建Map
         Map<String, PictureData> map = new HashMap<String, PictureData>();
         //获取HSSFWorkbook对象
    	 HSSFWorkbook workbook = (HSSFWorkbook) WorkbookFactory.create(fis);
         //获取图片HSSFPictureData集合
    	 List<HSSFPictureData> pictures = workbook.getAllPictures();
         //获取当前表编码所对应的表 
    	 HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(sheetNum - 1);
         //对表格进行操作
    	 for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {
    		 HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();
    		 if (shape instanceof HSSFPicture) {
    		    HSSFPicture pic = (HSSFPicture) shape;
                    //获取行编号
    		    int row = anchor.getRow2();
                    //获取列编号 
                    int col = anchor.getCol2();
                    int pictureIndex = pic.getPictureIndex()-1;
                    HSSFPictureData picData = pictures.get(pictureIndex);
                    map.put(row+":"+col, picData);
    		 }
    	 }
    	return map;
    }

    最后只需要调用此方法转成文件保存(或者上传ftp服务器,传ftp的方法就不写了)就行了

public static void main(String [] args){
    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();
}

猜你喜欢

转载自blog.csdn.net/weixin_41843053/article/details/81740521