public static void main(String[] args) {
// 模拟数据源
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", "Female", Arrays.asList("D:\\文件\\test\\1.jpg")));
personList.add(new Person("Bob", "Male", Arrays.asList("D:\\文件\\test\\1.jpg","D:\\文件\\test\\2.jpg")));
exportExcelImg(personList);
}
private static void exportExcelImg(List<Person> personList) {
XSSFWorkbook wb = new XSSFWorkbook();
try {
Sheet sheet = wb.createSheet();
// 创建表头
Row headerRow = sheet.createRow(0);
String[] columns = {"姓名", "性别", "照片"};
for (int i = 0; i < columns.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(columns[i]);
}
Drawing patriarch = sheet.createDrawingPatriarch();
int rowNum = 1;
for (Person person : personList) {
int columnNum = 0;
Row row = sheet.createRow(rowNum++);
row.createCell(columnNum++).setCellValue(person.getName());
row.createCell(columnNum++).setCellValue(person.getGender());
// 合并单元格并插入照片
int cellIndex = columnNum;
row.setHeight((short) (1100));
sheet.setColumnWidth(cellIndex, 5000 * person.getPhotoPaths().size());
for (int i = 0; i < person.getPhotoPaths().size(); i++) {
BufferedImage bufferedImage = null;
int hang = rowNum-1;
int lie = cellIndex;
//设置单元个宽高,单元格宽高限制了图片的宽高
XSSFClientAnchor anchor = null;
File file = new File(person.getPhotoPaths().get(i));
bufferedImage = ImageIO.read(file);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);
/* dx1:图片左边界距离单元格左边框像素值,
* dy1:图片上边界距离单元格上边框像素值,
* dx2:图片右边界距离单元格右边框像素值(负数),
* dy2:图片下边界距离单元格下边框像素值(负数),
* col1:列下标(0开始),
* row1:行下标(0开始),
* col2:列下标(1开始),
* row2:行下标(1开始)。*/
anchor = new XSSFClientAnchor(1500000 * i, 200000, -((1500000 * person.getPhotoPaths().size()) - (1500000 * (i + 1))), -100000, (short) lie, hang, (short) lie + 1, hang + 1);
anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
patriarch.createPicture(anchor, wb.addPicture(byteArrayOutputStream.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
}
}
//输出目的地
FileOutputStream outputStream = new FileOutputStream("D:\\文件\\test\\output.xlsx");
wb.write(outputStream);
outputStream.close();
} catch(Exception e){
e.printStackTrace();
}
}
private static class Person {
private String name;
private String gender;
private List<String> photoPaths;
public Person(String name, String gender, List<String> photoPaths) {
this.name = name;
this.gender = gender;
this.photoPaths = photoPaths;
}
public String getName() {
return name;
}
public String getGender() {
return gender;
}
public List<String> getPhotoPaths() {
return photoPaths;
}
}
poi实现多张图片导出到excel一个单元格
最新推荐文章于 2024-04-24 16:34:23 发布