6
需求: 将合并的单元格里,用图片方式显示复选框
我发现,在合并单元格里,当左边距超过第一个单元格的宽度时,就没有效果了,图片的左侧一直停留在单元格右侧边框上
实际显示效果: 图片1.位置设置:
imageData.setLeft(8);
imageData.setTop(3);
imageData.setRight(528);
imageData.setBottom(43);
图片2.位置设置:
imageData.setLeft(100);
imageData.setTop(2);
imageData.setRight(490);
imageData.setBottom(40);
图片3.位置设置:
imageData.setLeft(200);
imageData.setTop(20);
imageData.setRight(490);
imageData.setBottom(10);
代码: easyexcel版本:3.2.0
@Test
public void writeRLJX() throws Exception
{
//
String filePath = "C:\\ecloud\\uploadPath\\download";
String templateName = filePath + File.separator + "demo\\jxrl.workdoc.xlsx";
String fileName = filePath + File.separator + "demo\\测试" + ".xlsx";
// 图片路径
String imagePath = filePath + File.separator + "demo\\checkbox.png";
String imagePath2 = filePath + File.separator + "demo\\danger.png";
String imagePath3 = filePath + File.separator + "demo\\profile.jpg";
ExcelWriter excelWriter = null;
try {
// 1. 创建一个工作薄对象 ExcelWriter == workbook
excelWriter = EasyExcel.write(fileName)
.withTemplate(templateName)
.build();
// 2. 创建一个工作表对象
WriteSheet sheet = EasyExcel.writerSheet().build();
// 3. 数据
HashMap<String, Object> data = new HashMap<String, Object>();
File file = new File(imagePath);
WriteCellData<Void> writeCellData = new WriteCellData<>();
// 这里演示
// 可以放入多个图片
List<ImageData> imageDataList = new ArrayList<>();
// 1. 放入第一个图片
// .1.1 创建一个新的ImageData对象
ImageData imageData = new ImageData();
// .1.2 将ImageData对象加入链表List<ImageData>
imageDataList.add(imageData);
// .1.2 将List<ImageData>加入到WriteCellData
writeCellData.setImageDataList(imageDataList);
// .2.1 放入二进制进制图片
imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath)));
// .2.2 图片类型
imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);
// .2.3 上 右 下 左 需要留空
// 这个类似于 css 的 margin
// 这里实测 不能设置太大 超过单元格原始大小后 打开会提示修复。暂时未找到很好的解法。
imageData.setLeft(8);
imageData.setTop(3);
imageData.setRight(528);
imageData.setBottom(43);
imageData.setRelativeFirstRowIndex(0);
imageData.setRelativeFirstColumnIndex(0);
imageData.setRelativeLastRowIndex(0);
imageData.setRelativeLastColumnIndex(11);
// 2. 放入第二个图片
imageData = new ImageData();
imageDataList.add(imageData);
writeCellData.setImageDataList(imageDataList);
imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath2)));
imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);
imageData.setLeft(100);
imageData.setTop(2);
imageData.setRight(490);
imageData.setBottom(40);
imageData.setRelativeFirstRowIndex(0);
imageData.setRelativeFirstColumnIndex(0);
imageData.setRelativeLastRowIndex(0);
imageData.setRelativeLastColumnIndex(11);
// 3. 放入第三个图片
imageData = new ImageData();
imageDataList.add(imageData);
writeCellData.setImageDataList(imageDataList);
imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath3)));
imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);
imageData.setLeft(200);
imageData.setTop(20);
imageData.setRight(490);
imageData.setBottom(10);
imageData.setRelativeFirstRowIndex(0);
imageData.setRelativeFirstColumnIndex(0);
imageData.setRelativeLastRowIndex(0);
imageData.setRelativeLastColumnIndex(11);
writeCellData.setType(CellDataTypeEnum.STRING);
writeCellData.setStringValue(" □企业级 □部门级 □班组级 ■岗位级");
// 3.3 填充数据
data.put("image2", writeCellData);
excelWriter.fill(data, sheet);
// 4. 关闭流
excelWriter.finish();
}finally {
// 千万别忘记close 会帮忙关闭流
if (excelWriter != null) {
excelWriter.close();
}
}
}
请问,大家有什么好的办法?