import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.record.EscherAggregate;
import org.apache.poi.ddf.EscherRecord;
import org.apache.poi.ddf.EscherClientAnchorRecord;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
/**
* 获取Excel表中图片位置
* @author win user
*/
public class cc {
public static void main(String[] args) {
try {
new cc().getImageMatrices("D:/aa.xls");
} catch (Exception ex) {
System.out.println("Caught an: " + ex.getClass().getName());
System.out.println("Message: " + ex.getMessage());
System.out.println("Stacktrace follows:.....");
ex.printStackTrace(System.out);
}
}
public void getImageMatrices(String folderName) throws IOException,
FileNotFoundException, InvalidFormatException {
//File fileFolder = new File(folderName);
//File[] excelWorkbooks = fileFolder.listFiles(new ExcelFilenameFilter());
// for(File excelWorkbook : excelWorkbooks) {
Workbook workbook = WorkbookFactory.create(new FileInputStream(
folderName));
if (workbook instanceof HSSFWorkbook) {
this.processImages((HSSFWorkbook) workbook);
} else {
this.processImages((XSSFWorkbook) workbook);
}
// }
}
private void processImages(HSSFWorkbook workbook) {
EscherAggregate drawingAggregate = null;
HSSFSheet sheet = null;
List<EscherRecord> recordList = null;
Iterator<EscherRecord> recordIter = null;
sheet = workbook.getSheetAt(0);
drawingAggregate = sheet.getDrawingEscherAggregate();
if (drawingAggregate != null) {
recordList = drawingAggregate.getEscherRecords();
recordIter = recordList.iterator();
while (recordIter.hasNext()) {
this.iterateRecords(recordIter.next(), 1);
}
}
//}
}
private void iterateRecords(EscherRecord escherRecord, int level) {
List<EscherRecord> recordList = null;
Iterator<EscherRecord> recordIter = null;
EscherRecord childRecord = null;
recordList = escherRecord.getChildRecords();
recordIter = recordList.iterator();
while (recordIter.hasNext()) {
childRecord = recordIter.next();
if (childRecord instanceof EscherClientAnchorRecord) {
this.printAnchorDetails((EscherClientAnchorRecord) childRecord);
}
if (childRecord.getChildRecords().size() > 0) {
this.iterateRecords(childRecord, ++level);
}
}
}
private void printAnchorDetails(EscherClientAnchorRecord anchorRecord) {
System.out.print("图片左上角 "+anchorRecord.getRow1() +"行 " + anchorRecord.getCol1()+ "列" + " x坐标:"
+ anchorRecord.getDx1() + " y坐标:" + anchorRecord.getDy1());
System.out.println(" 图片的右下角 "+ anchorRecord.getRow2()+ " 行 "+ anchorRecord.getCol2() +" 列 "+ " x坐标:"
+ anchorRecord.getDx2()+ " y坐标:" + anchorRecord.getDy2());
}
private void processImages(XSSFWorkbook workbook) {
System.out.println("目前还不支持OOXML workbooks.Investigating.");
}
public class ExcelFilenameFilter implements FilenameFilter {
public boolean accept(File file, String fileName) {
boolean includeFile = false;
if (fileName.endsWith(".xls") || fileName.endsWith(".xlsx")) {
includeFile = true;
}
return (includeFile);
}
}
}