alibaba/easyexcel

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

Open

#3,849 opened on 2024年6月21日

GitHub で見る
 (0 comments) (0 reactions) (0 assignees)Java (7,599 forks)batch import
help wanted

Repository metrics

Stars
 (33,728 stars)
PR merge metrics
 (30d に merged 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[]类型会自动转换成图片 但是 却是悬浮的 不能跟随我所在的列移动 所以我自定义图片转换的以后 这个悬浮的图片依旧在 同时我自定的图片也是带出来了的

コントリビューターガイド