alibaba/easyexcel

【功能困惑】关于不创建对象导出base64图片时设置单元格坐标的属性疑惑

Open

#3625 aperta il 26 dic 2023

Vedi su GitHub
 (2 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

建议先去看文档

快速开始常见问题

异常代码

// 单元格坐标属性源码
public class CoordinateData {
    private Integer firstRowIndex;
    private Integer firstColumnIndex;
    private Integer lastRowIndex;
    private Integer lastColumnIndex;

    private Integer relativeFirstRowIndex;
    private Integer relativeFirstColumnIndex;
    private Integer relativeLastRowIndex;
    private Integer relativeLastColumnIndex;
}

// 设置图片单元格坐标
if (CollectionUtils.isNotEmpty(form.getChartImages()) && firstSheet != null) {
	firstSheetBodyNumber += 1;
	firstSheetHeaderNumber += 2;
	List<ImageData> imageList = Lists.newArrayList();
	for (String chartImage : form.getChartImages()) {
		// 移除base64前缀
		String base64 = chartImage.replaceFirst("^data:.+?;base64,", "");
		ImageData imageData = new ImageData();
		imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);
		imageData.setImage(Base64.decode(base64));
		// 图片外边距margin,上 右 下 左
		imageData.setTop(2);
		imageData.setRight(2);
		imageData.setBottom(2);
		imageData.setLeft(2);
		// 单元格坐标
		//imageData.setFirstRowIndex(0);
		//imageData.setFirstColumnIndex(firstSheetHeaderNumber);
		//imageData.setLastRowIndex(30 - 1);
		//imageData.setLastColumnIndex(firstSheetHeaderNumber + 20 - 1);
		imageData.setRelativeFirstRowIndex(-firstSheetBodyNumber);
		imageData.setRelativeFirstColumnIndex(firstSheetHeaderNumber);
		imageData.setRelativeLastRowIndex(-firstSheetBodyNumber + 30 - 1);
		imageData.setRelativeLastColumnIndex(firstSheetHeaderNumber + 20 - 1);
		firstSheetHeaderNumber += 20 + 2;
		imageList.add(imageData);
	}
	// 封装导出图片
	WriteCellData<Void> cellData = new WriteCellData<>();
	cellData.setType(CellDataTypeEnum.EMPTY);
	cellData.setImageDataList(imageList);
	List<WriteCellData> cellList = Lists.newArrayList(cellData);
	List<List<WriteCellData>> exportBody = Lists.newArrayList();
	exportBody.add(cellList);
	excelWriter.write(exportBody, firstSheet);
}
excelWriter.finish();

异常提示

大家尽量把问题一次性描述清楚,然后贴上全部异常,这样方便把问题一次性解决掉。 至少大家要符合一个原则就是,能让其他人复现出这个问题,如果无法复现,肯定无法解决。

问题描述

从属性名称上看,前4个坐标属性应该是指绝对坐标,后4个坐标属性应该是指相对坐标,然而实际导出效果却不是这样。我以为的绝对坐标实际上还是以相对坐标的位置插入的图片,这就与我预期的效果不符合了,搞得我只能以负数来设置左上角单元格和右下角单元格的相对坐标。假如有3行数据1行表头,有2列,有1张图片,预期图片插入起始位置为第1行第5列,结尾位置为第30行第25列, 则绝对坐标为[{row: 0, column: 5}, {row: 30, column: 5 + 20}],相对坐标为[{row: -4, column: 5}, {row: -4 + 30, column: 5 + 20}],目前只有相对坐标能达到效果,希望绝对坐标也能支持它应该有的效果。

Guida contributor