alibaba/easyexcel

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

Open

#3,625 opened on 2023年12月26日

GitHub で見る
 (2 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 はありません)

説明

建议先去看文档

快速开始常见问题

异常代码

// 单元格坐标属性源码
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}],目前只有相对坐标能达到效果,希望绝对坐标也能支持它应该有的效果。

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