注意:此种方法只适用于图片悬浮在单元格之上的图片搜寻!!!
首先导入相关poi的包:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。
读取表格内容的程序:
for (int i = 0; i < wookbook.getNumberOfSheets(); i++) {
sheet=wookbook.getSheetAt(i);
// 判断用07还是03的方法获取图片
if(filePath.endsWith(".xls")){
maplist=getPictures((HSSFSheet)sheet);
}else if(filePath.endsWith(".xlsx")){
maplist=getPictures((HSSFSheet)sheet);
}
printImg(maplist);
//获得表头
Row rowHead=sheet.getRow(0);
if(rowHead.getPhysicalNumberOfCells()!=6)
{
System.out.println("表头的数量不对!");
return;
}
//获得所有数据
for(int j=1;j<=sheet.getLastRowNum();j++)
{
//获得第i行对象
Row row=sheet.getRow(j);
for (short k = 0; k < row.getLastCellNum(); k++) {
Cell cell=row.getCell(k);
System.out.println(getXCellVal(cell));
}
}
}
读取图片的具体代码:
/**
* 获取excel表中的图片
* @return
* @Param fis 文件输入流
* @Param sheetNum Excel表中的sheet编号
* @throws IOException
* @throws InvalidFormatException
* @throws EncryptedDocumentException
*
* //说明Excel中的图片不在单元格内,而是悬浮在单元格之前,采用如下方式读取,
* //但要求图片必须放在某个单元格之内也不能压住边框,否则获取的行数会有重复的。
*/
public 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 &#