ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

获取excel的图片 目前只支持xls

2020-01-10 17:04:20  阅读:215  来源: 互联网

标签:java poi excel 获取 usermodel org apache import xls


 

我根据自己的需求,把excel的所有图片都弄出来,然后,保存起来

 

package cn.util;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;

import javax.imageio.ImageIO;

import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.POIXMLDocumentPart;
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.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.PictureData;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFPicture;
import org.apache.poi.xssf.usermodel.XSSFShape;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;

import fr.opensagres.xdocreport.core.io.internal.ByteArrayOutputStream;

public class ExcelGetImg {

public static Map<String, PictureData> map =null;
public static Map<String, PictureData> getPictureFromExcel(FileInputStream fis, int
sheetNum) throws EncryptedDocumentException, InvalidFormatException, IOException{
//创建Map
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;


}




public static void main(String [] args) throws Exception{

File sourcefile = new File("E:\\test\\11.xls");
FileInputStream is = new FileInputStream(sourcefile);
map= getPictureFromExcel(is, 1);
for(Entry<String, PictureData> a:map.entrySet()){

System.out.println("键是"+a.getKey());

System.out.println("值是"+a.getValue());

PictureData picData = map.get(a.getKey());
//String ext = picData.suggestFileExtension();//获取图片的后缀名
byte[] data = picData.getData();
String fileName = UUID.randomUUID().toString();
//文件夹路径:temporarypath
String temporarypath ="E:\\test\\857";
FileOutputStream out = new FileOutputStream(temporarypath + fileName + ".jpg");
out.write(data);
out.close();

}


}



}

标签:java,poi,excel,获取,usermodel,org,apache,import,xls
来源: https://www.cnblogs.com/Mr-Y1907/p/12177001.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有