我们要用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();
}