data = data();
@@ -227,7 +232,7 @@ public class WriteTest {
/**
* 图片导出
*
- * 1. 创建excel对应的实体对象 参照{@link ImageData}
+ * 1. 创建excel对应的实体对象 参照{@link ImageDemoData}
*
* 2. 直接写即可
*/
@@ -237,19 +242,49 @@ public class WriteTest {
// 如果使用流 记得关闭
InputStream inputStream = null;
try {
- List list = new ArrayList();
- ImageData imageData = new ImageData();
- list.add(imageData);
+ List list = new ArrayList<>();
+ ImageDemoData imageDemoData = new ImageDemoData();
+ list.add(imageDemoData);
String imagePath = TestFileUtil.getPath() + "converter" + File.separator + "img.jpg";
// 放入五种类型的图片 实际使用只要选一种即可
- imageData.setByteArray(FileUtils.readFileToByteArray(new File(imagePath)));
- imageData.setFile(new File(imagePath));
- imageData.setString(imagePath);
+ imageDemoData.setByteArray(FileUtils.readFileToByteArray(new File(imagePath)));
+ imageDemoData.setFile(new File(imagePath));
+ imageDemoData.setString(imagePath);
inputStream = FileUtils.openInputStream(new File(imagePath));
- imageData.setInputStream(inputStream);
- imageData.setUrl(new URL(
- "https://raw.githubusercontent.com/alibaba/easyexcel/master/src/test/resources/converter/img.jpg"));
- EasyExcel.write(fileName, ImageData.class).sheet().doWrite(list);
+ imageDemoData.setInputStream(inputStream);
+ imageDemoData.setUrl(new URL(
+ "https://raw.githubusercontent.com/alibaba/easyexcel/master/src/test/resources/converter/img.jpg"));
+
+ // 这里演示 图片 不想顶格放 且占用2个单元格的情况
+ WriteCellData writeCellData = new WriteCellData<>();
+ imageDemoData.setWriteCellDataFile(writeCellData);
+ // 设置为空 代表当前单元格不需要写图片以外的数据
+ writeCellData.setType(CellDataTypeEnum.EMPTY);
+ // 可以放入多个图片
+ List imageDataList = new ArrayList<>();
+ ImageData imageData = new ImageData();
+ imageDataList.add(imageData);
+ writeCellData.setImageDataList(imageDataList);
+ // 放入2进制图片
+ imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath)));
+ // 图片类型
+ imageData.setImageType(ImageType.PICTURE_TYPE_PNG);
+ // 上 右 下 左 需要留空
+ // 这里实测 不能设置太大 超过单元格原始大小后 打开会提示修复。暂时未找到很好的解法。
+ imageData.setTop(5);
+ imageData.setRight(5);
+ imageData.setBottom(5);
+ imageData.setLeft(5);
+ // 设置图片的位置 假设 现在目标 是 覆盖 当前单元格 和当前单元格右边的单元格
+ // 起点相对于当前单元格为0 当然可以不写
+ imageData.setRelativeFirstRowIndex(0);
+ imageData.setRelativeFirstColumnIndex(0);
+ imageData.setRelativeLastRowIndex(0);
+ // 前面3个可以不写 下面这个需要写 也就是 结尾 需要相对当前单元格 往右移动一格
+ imageData.setRelativeLastColumnIndex(1);
+
+ // 写入数据
+ EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list);
} finally {
if (inputStream != null) {
inputStream.close();
@@ -325,7 +360,7 @@ public class WriteTest {
// 背景设置为红色
headWriteCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
WriteFont headWriteFont = new WriteFont();
- headWriteFont.setFontHeightInPoints((short) 20);
+ headWriteFont.setFontHeightInPoints((short)20);
headWriteCellStyle.setWriteFont(headWriteFont);
// 内容的策略
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
@@ -335,7 +370,7 @@ public class WriteTest {
contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());
WriteFont contentWriteFont = new WriteFont();
// 字体大小
- contentWriteFont.setFontHeightInPoints((short) 20);
+ contentWriteFont.setFontHeightInPoints((short)20);
contentWriteCellStyle.setWriteFont(contentWriteFont);
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
HorizontalCellStyleStrategy horizontalCellStyleStrategy =
@@ -428,7 +463,8 @@ public class WriteTest {
/**
* 自动列宽(不太精确)
*
- * 这个目前不是很好用,比如有数字就会导致换行。而且长度也不是刚好和实际长度一致。 所以需要精确到刚好列宽的慎用。 当然也可以自己参照 {@link LongestMatchColumnWidthStyleStrategy}重新实现.
+ * 这个目前不是很好用,比如有数字就会导致换行。而且长度也不是刚好和实际长度一致。 所以需要精确到刚好列宽的慎用。 当然也可以自己参照 {@link LongestMatchColumnWidthStyleStrategy}
+ * 重新实现.
*
* poi 自带{@link SXSSFSheet#autoSizeColumn(int)} 对中文支持也不太好。目前没找到很好的算法。 有的话可以推荐下。
*