alibaba/easyexcel

图片byte[]类型导出 与自定义的hanlder重复 也无法关闭

Open

#3,849 opened on Jun 21, 2024

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Java (7,599 forks)batch import
help wanted

Repository metrics

Stars
 (33,728 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

WriteHandler imageHandler = new ImageCellWriteHandler();

            EasyExcelFactory.write(response.getOutputStream()).head(TicketsExportVO.class)
                    .registerWriteHandler(imageHandler)
                    .sheet("工单").doWrite(exportVOList);

导出VO图片字段 @ApiModelProperty("附件") @ExcelProperty(value="附件") private byte[] concatenatedPathByte;

自定义的 handler @Override public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {

    // 检查是否为需要插入图片的单元格
    if ("concatenatedPathByte".equals(head.getFieldName()) && !isHead) {
        // 从cellDataList中获取图片数据
        if (cellDataList != null && !cellDataList.isEmpty()) {
            CellData cellData = cellDataList.get(0);
            byte[] imageBytes = (byte[]) cellData.getImageValue();
            insertImage(writeSheetHolder, cell, imageBytes);
        }
    }
}

private void insertImage(WriteSheetHolder writeSheetHolder, Cell cell, byte[] imageBytes) {
    if (imageBytes != null && imageBytes.length > 0) {
        Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
        int pictureIdx = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_PNG);

        Drawing<?> drawing = writeSheetHolder.getSheet().createDrawingPatriarch();
        ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
        anchor.setCol1(cell.getColumnIndex());
        anchor.setRow1(cell.getRowIndex());

        Picture pict = drawing.createPicture(anchor, pictureIdx);
        pict.resize(1,2); // 自动调整大小以适应单元格
    }
}

byte[]类型会自动转换成图片 但是 却是悬浮的 不能跟随我所在的列移动 所以我自定义图片转换的以后 这个悬浮的图片依旧在 同时我自定的图片也是带出来了的

Contributor guide