easyExcel 插入图片,调整比例,指定位置
时间: 2025-05-13 16:45:36 浏览: 27
### 使用 EasyExcel 插入图片并调整大小及指定单元格位置
在使用 EasyExcel 导出 Excel 文件时,可以通过 Apache POI 结合 EasyExcel 来实现插入图片的功能。以下是具体的操作方法和示例代码。
#### 实现步骤说明
为了实现在特定单元格中插入图片,并保持图片的比例不变,可以利用 `Drawing` 和 `ClientAnchor` 对象来设置图片的位置和尺寸。以下是一个完整的解决方案:
1. **引入依赖**
需要确保 Maven 中已经引入了 EasyExcel 和 Apache POI 的相关依赖[^4]。
2. **创建自定义样式处理器**
自定义一个类继承 `AbstractCellStyleStrategy` 并重写其中的方法,在该方法中完成图片的插入逻辑。
3. **编写核心代码**
下面提供了一个具体的代码示例,展示如何插入图片、调整其比例以及指定单元格位置。
```java
import com.alibaba.excel.EasyExcel;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
public class InsertImageExample {
public static void main(String[] args) throws Exception {
String fileName = "output_with_image.xlsx";
// 创建工作簿对象
SXSSFWorkbook workbook = new SXSSFWorkbook();
Sheet sheet = workbook.createSheet("图片示例");
// 加载本地图片文件
InputStream inputStream = new FileInputStream("path/to/image.png");
byte[] bytes = IOUtils.toByteArray(inputStream);
int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
// 定义图片所在单元格范围 (A1:A5)
CreationHelper helper = workbook.getCreationHelper();
Drawing<?> drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(0); // 图片起始列索引
anchor.setRow1(0); // 图片起始行索引
anchor.setDx1(0); // 偏移量 X 方向起点
anchor.setDy1(0); // 偏移量 Y 方向起点
// 设置结束坐标以控制图片的高度和宽度
anchor.setCol2(0); // 图片终止列索引
anchor.setRow2(5); // 图片终止行索引
anchor.setDx2(0); // 偏移量 X 方向终点
anchor.setDy2(0); // 偏移量 Y 方向终点
// 添加图片至锚点
drawing.createPicture(anchor, pictureIdx);
// 将工作簿写出到文件
try (FileOutputStream fileOut = new FileOutputStream(fileName)) {
workbook.write(fileOut);
}
System.out.println("图片已成功插入!");
}
}
```
上述代码实现了以下几个功能:
- 通过 `workbook.addPicture()` 方法加载外部图片资源[^3]。
- 利用 `ClientAnchor` 设定图片的具体位置及其宽高比例[^1]。
- 使用 `drawing.createPicture()` 方法将图片绘制到目标单元格区域。
#### 关键参数解释
- `setCol1`, `setRow1`: 表示图片左上角所在的列号与行号。
- `setCol2`, `setRow2`: 表示图片右下角所在的列号与行号,用于设定图片的实际显示面积。
- 如果希望图片按原始比例缩放,则需手动计算合适的行列跨度值。
---
### 注意事项
当涉及大量数据处理时,建议采用 Streaming 模式 (`SXSSFWorkbook`) 替代传统模式 (`XSSFWorkbook`),从而降低内存占用率[^2]。
---
阅读全文
相关推荐


















