[alibaba/easyexcel]填充Excel时填充图片到模板中合并单元格的图片,只占一行一列,并未占满整个合并后的单元格

2024-05-17 727 views
7

*

    Map<String, Object> map1 = new HashMap<>();
        map1.put("image",new File(TestFileUtil.getPath() + "converter" + File.separator + "50.jpg"));
        excelWriter.fill(map1, writeSheet);

这是模板 模板 下面是填充后的效果 填充后

回答

1

老铁,能不能一个单元格填充多张图片啊,求教.

4

老铁,能不能一个单元格填充多张图片啊,求教.

1

老铁,能不能一个单元格填充多张图片啊,求教.

你是模板填充还是,直接单元格写入

6

老铁,能不能一个单元格填充多张图片啊,求教.

你是模板填充还是,直接单元格写入 你试下自定义拦截看看 https://www.yuque.com/easyexcel/faq/wpedtd `/**

  • 图片修改拦截器
  • @author JiaJu Zhuang
  • @date 2020/7/23 10:20 上午 **/ public class ImageModifyHandler implements CellWriteHandler {
@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder,
    WriteTableHolder writeTableHolder, Row row,
    Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {

}

@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder,
    WriteTableHolder writeTableHolder, Cell cell, Head head,
    Integer relativeRowIndex, Boolean isHead) {

}

@Override
public void afterCellDataConverted(WriteSheetHolder writeSheetHolder,
    WriteTableHolder writeTableHolder, CellData cellData,
    Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
    //  在 数据转换成功后 ,修改第一列 当然这里也可以根据其他判断  然后不是头  就把类型设置成空 这样easyexcel 不会去处理该单元格
    if (head.getColumnIndex() != 1 || isHead) {
        return;
    }
    cellData.setType(CellDataTypeEnum.EMPTY);
}

@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder,
    WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell,
    Head head, Integer relativeRowIndex, Boolean isHead) {
    //  在 单元格写入完毕后 ,自己填充图片
    if (head.getColumnIndex() != 1 || isHead || cellDataList.isEmpty()) {
        return;
    }
    Sheet sheet = cell.getSheet();
    // cellDataList 是list的原因是 填充的情况下 可能会多个写到一个单元格 但是如果普通写入 一定只有一个
    int index = sheet.getWorkbook().addPicture(cellDataList.get(0).getImageValue(), HSSFWorkbook.PICTURE_TYPE_PNG);
    Drawing drawing = sheet.getDrawingPatriarch();
    if (drawing == null) {
        drawing = sheet.createDrawingPatriarch();
    }
    CreationHelper helper = sheet.getWorkbook().getCreationHelper();
    ClientAnchor anchor = helper.createClientAnchor();
    // 设置图片坐标
    anchor.setDx1(0);
    anchor.setDx2(0);
    anchor.setDy1(0);
    anchor.setDy2(0);
    //设置图片位置
    anchor.setCol1(cell.getColumnIndex());
    anchor.setCol2(cell.getColumnIndex() + 1);
    anchor.setRow1(cell.getRowIndex());
    anchor.setRow2(cell.getRowIndex() + 1);
    // 设置图片可以随着单元格移动
    anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE);
    drawing.createPicture(anchor, index);
}

}`

// 重点是registerWriteHandler 其他的根据自己来 EasyExcel.write(fileName, ImageData.class).registerWriteHandler(new ImageModifyHandler()).sheet().doWrite(list);

3

老哥可以贴一下代码嘛 怎么解决这个问题的

2

就在这块设置的

CreationHelper helper = sheet.getWorkbook().getCreationHelper(); ClientAnchor anchor = helper.createClientAnchor(); // 设置图片坐标 anchor.setDx1(0); anchor.setDx2(0); anchor.setDy1(0); anchor.setDy2(0); //设置图片位置 anchor.setCol1(cell.getColumnIndex()); anchor.setCol2(cell.getColumnIndex() + 1); anchor.setRow1(cell.getRowIndex()); anchor.setRow2(cell.getRowIndex() + 1); // 设置图片可以随着单元格移动 anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE); drawing.createPicture(anchor, index);

9

请问你的图片是可以这样直接填充到模板吗?我的试了半天也不行,我没自定义拦截器

Map<String, Object> map1 = new HashMap<>();
map1.put("image",new File(TestFileUtil.getPath() + "converter" + File.separator + "50.jpg"));
excelWriter.fill(map1, writeSheet);
3

就在这块设置的

CreationHelper helper = sheet.getWorkbook().getCreationHelper(); ClientAnchor anchor = helper.createClientAnchor(); // 设置图片坐标 anchor.setDx1(0); anchor.setDx2(0); anchor.setDy1(0); anchor.setDy2(0); //设置图片位置 anchor.setCol1(cell.getColumnIndex()); anchor.setCol2(cell.getColumnIndex() + 1); anchor.setRow1(cell.getRowIndex()); anchor.setRow2(cell.getRowIndex() + 1); // 设置图片可以随着单元格移动 anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE); drawing.createPicture(anchor, index);

还有一个问题请问下,你合并单元格时,图片是怎么铺满单元格的?我在你发的链接里看了,没找到解决方案。可以提供一下代码么?谢谢!

0

找到原因了。不支持07版excel... 只支持03版

6

是不用Map了填充了吗?

7

在模板填充时,对合并单元进行多张图片填充,默认操作的都是合并单元格的第一个单元格,如何将图片分散到整个合并单元格中

1

请问你的图片是可以这样直接填充到模板吗?我的试了半天也不行,我没自定义拦截器

Map<String, Object> map1 = new HashMap<>();
map1.put("image",new File(TestFileUtil.getPath() + "converter" + File.separator + "50.jpg"));
excelWriter.fill(map1, writeSheet);

我的也不能填充进去

7

就在这块设置的

CreationHelper helper = sheet.getWorkbook().getCreationHelper(); ClientAnchor anchor = helper.createClientAnchor(); // 设置图片坐标 anchor.setDx1(0); anchor.setDx2(0); anchor.setDy1(0); anchor.setDy2(0); //设置图片位置 anchor.setCol1(cell.getColumnIndex()); anchor.setCol2(cell.getColumnIndex() + 1); anchor.setRow1(cell.getRowIndex()); anchor.setRow2(cell.getRowIndex() + 1); // 设置图片可以随着单元格移动 anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE); drawing.createPicture(anchor, index);

你好 这个有个问题 会新增一个图片 盖住原来小的 如果原来是大的 修改成小的 就很明显啦 如何解决只保留修改后图片