alibaba/easyexcel

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

Open

#3,849 创建于 2024年6月21日

在 GitHub 查看
 (0 评论) (0 反应) (0 负责人)Java (7,599 fork)batch import
help wanted

仓库指标

Star
 (33,728 star)
PR 合并指标
 (30 天内没有已合并 PR)

描述

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

贡献者指南