alibaba/easyexcel

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

Open

#3849 aperta il 21 giu 2024

Vedi su GitHub
 (0 commenti) (0 reazioni) (0 assegnatari)Java (7599 fork)batch import
help wanted

Metriche repository

Star
 (33.728 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

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

Guida contributor